递归:
分析:递归的思想,举个例子吧!!!电影院看电影院,当你去晚了,然后从最后一排问,你是第几排,一直问到第一排,然后第一排的人又以相同的方式传回来,重复做相同的工作,先去传递“你是第几排”这个问题,然后回归给自己“我是第几排”,得到结果。自己调用自己,会出现无限循环的问题(死循环),所以必须有跳出,结束条件,才能有结果。
先传递,后回归。必须有跳出才有结果。自己调用自己。
找规律
eg:
用递归算阶乘 5的阶乘 1 * 2 * 3 * 4 * 5
分析:
5! == 5 * 4!
4! == 4 * 3!
3! == 3 * 2!
2! == 2 * 1!
fn(5);
return 5 * fn(4);
fn(4)
return 4 * fn(3)
fn(3)
return 3 * fn(2)
fn(2)
return 2 * fn(1)
11.递归案例
1.利用递归求1-100的和
//分析
// 100 + fn(99);
// 99 + fn(98);
//实现
function sum(n){
if(n <= 1) return 1;
return n + sum(n-1);
}
console.log(sum(5));
2.兔子 3个月成年 ——> 繁殖
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987
//分析:
fn(n) = fn(n-1) + fn(n-2);
fn(10) = fn(9) + fn(8);
fn(9) = fn(8) + fn(7);
fn(8) = fn(7) + fn(6);
编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数求/1+1/3+...+1/n
分析:
10 1 / 10 + 1 / 8 + 1 / 6
11 1 / 11 + 1/ 9 + 1 / 7....
规律:1 / n + fn(n - 2);
实现:
function fn(n){
if(n == 1 || n == 2){
return 1/n;
}
return 1 / n + fn(n-2);
}
console.log(fn(10));