递归函数(猴子吃桃 卖金鱼 斐波那契数列 搭公交):
1.简单示例:
function sum(n) {
if (n == 1) {
return 1;
} else {
return n + sum(n - 1);
}
}
console.log(sum(100));
2.猴子吃桃案例:
小猴子第一天摘下若干桃子,当即吃掉一半,又多吃一个.
第二天早上又将剩下的桃子吃一半,又多吃一个.
以后每天早上吃前一天剩下的一半加一个.
到第10天早上猴子想再吃时发现,只剩下一个桃子了.
问第一天猴子共摘多少个桃子?
function f(n){
if(n == 10){
return 1;
}else{
//f(n)/2-1=f(n+1);
return 2*(f(n+1)+1);
}
}
console.log(f(1));
3.卖金鱼:
出售金鱼问题:第一次卖出全部金鱼的一半加二分之一条金鱼;
第二次卖出乘余金鱼的三分之一加三分之一条金鱼;
第三次卖出剩余金鱼的四分之一加四分之一条金鱼;
第四次卖出剩余金鱼的五分之一加五分之一条金鱼;现在还剩下11条金鱼,
求原来有多少条?
function jY(n){
if(n == 5){
return 11;
}else{
//jY(n)*n/(n+1) - 1/(n+1) = jY(n+1);
return (jY(n+1)*(n+1)+1)/n;
}
}
console.log(jY(1));
4.用递归求斐波那契数列:
//1 1 2 3 5 .....
//斐波那契数列是指从第三项开始,没一项的值为前两项的和,而第一二项则为1;
function fn(n){
//1.2项的值为1;
if(n == 1 || n == 2){
return 1;
}else{
return (fn(n-1) + fn(n-2));
}
}
console.log(fn(100));
5.用递推法求斐波那契数列:
function f(n){
var f1 = 1;
var f2 = 1;
for(var i=1;ii++){
var temp = f2;
f2 = f2 + f1;
f1 = temp;
}
return temp;
}
console.log(f(5));
6.搭公交:
某路公共汽车,总共有八站,从一号站发轩时车上已有n位乘客,
到了第二站先下一半乘客,再上来了六位乘客;
到了第三站也先下一半乘客,再上来了五位乘客,
以后每到一站都先下车上已有的一半乘客,再上来了乘客比前一站少一个,
到了终点站车上还有乘客六人,问发车时车上的乘客有多少?
function f(n){
if(n == 8){ //第8站车上有的人(第8站未下车的人)。
return 6;
}else{
//f(n+1) = f(n)/2 + (8-n);
return (f(n+1)+n-8)*2;
}
}
console.log(f(2)); //第2站未下车的人,即第一站的人。