递归函数就是自己调用自己,必须要有结束条件。
计算1-N之间的和
function sum (n) {
2,结束递归
if(n ===1) {
return 1
}
1, //把未知问题转已知问题
return sum(n-1)+n
}
sum(5);原理:层层递进,层层回归。如下
//sum(5)==》sum(4) + 5
//sum(4)==》sum(3) + 4
//sum(3)==》sum(2) + 3
//sum(2)==》sum(1) + 2
//sum(1)==》1
----------------------------------------------------------------------------------------
斐波那契(计算次数多,性能不佳)
已知一对兔子每月可生一对小兔子,出生的小兔子三个月后,每个月可以生一对兔子。假设没有死亡的情况下一年能有多少兔子?
function fib (n) {
//第一个月和第二个月兔子的数量都是一对
if(n ===1 || n ===2) {
return 1
}
return fil(n-1) + fib(n-2)
}
fib(12)
-------------------------------------------------------
优化版
//声明一个容器存储计算过的月份
var cache = {}
function fib (n) {
//第一个月和第二个月兔子的数量都是一对
if(n ===1 || n ===2) {
return 1
}
if(cache[n]) {
return cache[n]
}else {
//1,计算兔子数量
var ret = fil(n-1) + fib(n-2)
//2,用容器把变量存起来
cache[n] = ret
//3,把计算结果返回出去
return ret;
}
return fil(n-1) + fib(n-2)
}
fib(100)