1.注意递归一定要向结束递归的方向靠近,不然会栈溢出。
2.局部变量相互独立,比如n
3.应用类型变量比如数组,会共享数据内容
4.当一个方法执行完毕或者遇到return语句,就会返回并遵守谁调用就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也执行完毕。
5,当一个方法(递归,调用自己的那行代码)执行到最后了才会接着执行后面的方法!比如下面的test,先开辟出test(4)放在栈底,然后是test(3),最后test(2).因为n=2时已经不能再
进入if语句了,所以会接下去执行system的输出语句,先执行栈顶的test(2),所以先输出2,再依次执行。再比如二叉树的前序遍历。先执行根输出那个方法,再左树,一直执行到左边最后
一个叶子节点了(C),再回溯到B,然后执行下面的右节点遍历,遍历到D。然后再回溯到A,执行右遍历,一样的思路。
遇到return 语句,就会返回到调用的位置。有结果就把结果带到调用的位置,没结果就返回到调用的位置继续往下执行
//递归每执行到一个方法的时候会产生一个栈空间,放进一个栈里。这里test(4)产生了3个栈空间,test(2)在最顶上,然后是test(3),test(4)
//根据栈从顶执行的规则来看,先输出2,然后执行test(3),注意,test(3)自己不会多产生一个test(2)栈空间,会直接执行打印操作。输出2,3,4
public void test(int n){
if(n>2){
test(n-1);
}
System.out.println(n);
}
回溯:回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径
迷宫问题
![]()