題目:有一對兔子荒叶,從出生后第3個月起每個月都生一對兔子肆汹,小兔子長到第三個月后每個月又生一對兔子愚墓,假如兔子都不死,問每個月的兔子總數(shù)為多少昂勉?(輸出前40個月即可)
程序分析:兔子的規(guī)律為數(shù)列1,1,2,3,5,8,13,21....浪册,即下個月是上兩個月之和(從第三個月開始)。
方法一:利用函數(shù)遞歸
<script type="text/javascript">
//總數(shù):1,1,2,3,5,8,13,21
//月數(shù):1,2,3,4,5,6, 7, 8
//f(1)=1;f(2)=1;
//f(n)=f(n-1)+f(n-2)
function resultFn(n){
function f(n){
if(n<3) return 1;
else {
return arguments.callee(n-1) + arguments.callee(n-2)
}
}
console.log(f(n))
}
for(let n=0;n<=40;n++){
resultFn(n)
}
</script>
我們發(fā)現(xiàn)利用函數(shù)遞歸的方式岗照,照成了大量的重復(fù)計(jì)算村象,效率是非常之地的笆环。
方法二:利用循環(huán)的方式
<script type="text/javascript">
function resultFn(n){
function f(n){
if(n<3) return 1;
else {
/* f1 f2 fn
1 1 2 n=3
1 2 3 n=4
2 3 5 n=5
3 5 8 n=4
*/
var f1=1,f2=1,fn;
for(var i=3;i<=n;i++){
fn=f1+f2;
f1=f2;
f2=fn;
}
return fn;
}
}
console.log(f(n))
}
for(let n=0;n<=40;n++){
resultFn(n)
}
</script>