递归与回溯
一、递归与回溯的区别
个人理解:
递归的定义:
- 递归是此时的状态会用用到自己上一个状态的值;
回溯的定义
- 回溯是进行一步一步的探索,当下一个状态走完时会回到上一个状态继续寻找其他的状态,相当于一种穷举式的搜索
二、递归
递归的相关运用:搜索,排序,遍历
递归和迭代的区别:
递归:
- 遇到基本条件时会终止
- 每次递归都需要开辟帧栈耗费内存
- 如果无休止的递归下去会发生栈溢出错误
- 有些问题用递归会更简单一些
迭代:
- 会在相关条件不成立时终止
- 执行每一次迭代时不需要开辟额外内存
- 由于不需要开辟新的内存可以一直迭代下去
- 某些问题的迭代解法不如递归法那样直观
实例一:
阶乘问题:输入n数返回n的阶乘。
用递归方法就很直接,简单:
public int Factorial(int n){
if(n == 0){
return 1;
}
if(n == 1){
return 1;
}
else {
return n*Factorial(n-1);
}
}
递归的注意事项:
- 递归有递归情况和基本情况
- 所有递归情况都会