什么是递归
在程序中,所谓的递归就是函数直接调用自己或者间接调用自己
递归思想就是将一个问题转换为一个已解决的问题
递归的概念
在程序中函数直接或间接调用自己
1.直接调用自己
2.间接调用自己
跳出结构,有了跳出才有结果
递归的思想
递归的调用,最终还是要转换为自己这个函数
1.如果有个函数foo,如果他是递归函数,到最后问题还是转换为函数foo的形式
2.递归的思想就是将一个未知问题转换为一个已解决的问题来实现
function foo(){
...
foo(...)
...
}
递归的技巧
1.假设递归函数已经写好
2.寻找递推关系
3. 将递推关系的结构转换为递归体
4. 将临界条件加入到递归体中
Fibonacci数列第N项
var fib = function (n){
if(n<=2){
return 1;
}
return fib(n-1) + fib(n-2);
}
console.log(fib(5));
递归的总结
两个必要因素:
递归方程,递归结束条件。
算法核心:
- 在有限次可预见性结果中,找到结果与上一次结果之间的关系。
- f(n)与f(n-1)的关系有时候很简单,如同走楼梯,状态单一;又有时如同细胞分裂,多种状态组合影响结果。
- 关键在于梳理清楚本次结果和上一次结果的关系有哪些方面或是因素。
- 在草稿纸上写出前几次的结果,或者画图,这样更容易找到规律,这种规律实际上就是递归方程。