首页 > 代码库 > 兔子生兔子问题
兔子生兔子问题
一对兔子,从出生后的第3个月起每个月都生1对,小兔子长到第3个月后每个月又生1对兔子,假如兔子都不死,某个月的兔子总数是多少
分析:每个月兔子总数1,1,2,3,5,8,13,21,34,55...
n1=1;//第一个月
n2=1;//第二个月
n1=n1+n2;//第三个月
n2=n1+n2;//第四个月
f(n):第n个月 兔子总量
f(n)=f(n-1)+f(n-2)
f(5)=f(4)+f(3)
f(4):3
f(3):2
f(2):1
f(1):1
<script> function calFib(){ var n1=1,n2=1; var str=‘‘; for(var i=1;i<=10;i++){ str+=n1+","+n2+","; n1=n1+n2; n2=n1+n2; } console.log(str); } calFib(); /*递归:计算兔子总量*/ function f(n){ if(n==1|| n==2){ return 1; } return f(n-1)+f(n-2); } console.log(f(5));//第五个月的兔子总数 </script>
递归:在函数内,又调用了自己;递归调用的内层函数,是在外层函数还未结束时,就已经开始了,外层函数的调用,就会被阻塞;
递归缺点:算法复杂度太高,浪费内存
解决:大多数递归,可以被循环替代的;
/*for循环替换递归*/ function f(n){ if(n==1|| n==2){ return 1; } var f1=1,f2=1; var fn; //条件:从1开始,到n-2结束 //操作:f1+f2赋值给一个变量(fn);将f2赋值给f1;将fn赋值给f2; for(var i=1;i<=n-2;i++){ fn=f1+f2; f1=f2; f2=fn; } return fn; } console.log(f(5));
兔子生兔子问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。