本文主要是介绍折纸问题(递归求解),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
折纸问题:
请把一段纸条竖着放在桌子上,然后从纸条的下边向上方对折1次,压出折痕后展开。
此时 折痕是凹下去的,即折痕突起的方向指向纸条的背面。如果从纸条的下边向上方连续对折
2 次,压出折痕后展开,此时有三条折痕,从上到下依次是下折痕、下折痕和上折痕。
给定一 个输入参数N,代表纸条都从下边向上方连续对折N次,请从上到下打印所有折痕的方向。
例如:N=1时,打印: down;N=2时,打印: down down up
思路:通过总结规律的当折了n次时,折痕顺序是是n层的二叉树中序遍历顺序
借助中序的递归输出即可,但是递归需要思考几个问题:
递归过程是什么?终止条件是什么?返回值是什么?完成这些需要什么参数,这些参数可以当作入口参宿和传递进来
类似递归改进问题可见:求解完全二叉树的结点个数
在此输出顺序是down up 所以在输出时要判断down还是up 显然左结点是down 右结点是up 即可以在递归传入左右节点的时候代入参数值 down或者up ,另外递归的终止条件,显然是递归到第N层,完成输出 因此需要一个参数记录当前层数 以及折纸次数N
public class paperFold {public static void paper(int N) {printpaper(N,1,true);}public static void printpaper(int N,int i,boolean down) {if(i>N) return;printpaper( N, i+1,true);if(down) System.out.println("down");else System.out.println("up");printpaper(N,i+1, false); }public static void main(String[] args) {int N = 4;paper(N);}}
更多类似改递归求解问题比如 求完全二叉树结点个数
这篇关于折纸问题(递归求解)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!