递归
递归即自己调用自己,称为递归调用
解决递归问题的步骤:
1. 假设递归函数已经写好
2. 寻找递推关系
3. 将递推关系的结构转换为递归体
4. 将临界条件加入到递归体中
例1:求阶乘
function fn(n) { if(n===1) { return 1; } return n*fn(n-1); } console.log(fn(3));
例2: 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路:假设第一次跳上1级,那么就有f(n-1)种跳法,第一次跳2级,那么就有f(n-2)中跳法。所以总共就有f(n-1)+f(n-2)种。
function jumpFloor(number){ if(number<=2){ return number; } return jumpFloor(number-1)+jumpFloor(number-2); }
例3:兔子生兔子--从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
思路:1,1,2,3,5...分析数据可得f(n)=f(n-1)+f(n-2)
function born(n) { if(n < 3) { return n; } return born(n-2)+born(n-1) }