递归实例分析
1、公园里面有200个桃子,每天吃掉一半,扔掉一个烂的,第六天剩余多少个桃子?
var sl=200;i=0; for(i=0;i<6;i++){ sl=parseInt(sl/2-1); } alert(sl);
2、公园里有一堆桃子,猴子每天吃掉一半,扔掉一个烂的,第六天剩余1个桃子,问刚开始有多少个桃子
var sl=1;i=0; for(i=0;i<6;i++){ sl=(sl+1)*2; } alert(sl);
递归:特点:自己调用自己
function shuLiang(ts){ if(ts==6){ return 1; } return (shuLiang(ts+1)+1)*2; } alert(shuLiang(0));
分析:1、当天的剩余量=(下一天的剩余量+1)*2
2、设定的函数shuLiang(ts)表示给定一个天数,返回该天的剩余数量
3、开始循环:首先当ts=0;执行 return (shuLiang(0+1)+1)*2;由于不知ts=1时剩余数量继续循环
ts=1;执行 return (shuLiang(1+1)+1)*2;继续循环
ts=2;执行 return (shuLiang(2+1)+1)*2;继续循环
ts=3;执行 return (shuLiang(3+1)+1)*2;继续循环
ts=4;执行 return (shuLiang(4+1)+1)*2;继续循环
ts=5;执行 return (shuLiang(5+1)+1)*2;继续循环
ts=6;执行 if(ts==6){ return 1;};已知ts=6时剩余数量,将1返回给ts=5;执行return (shuLiang(5+1)+1)*2;
求得shuLiang(5);将shuLiang(5)的值返回给ts=4,执行return (shuLiang(4+1)+1)*2;
求得shuLiang(4);将shuLiang(4)的值返回给ts=3,执行return (shuLiang(3+1)+1)*2;
求得shuLiang(3);将shuLiang(3)的值返回给ts=2,执行return (shuLiang(2+1)+1)*2;
求得shuLiang(2);将shuLiang(2)的值返回给ts=1,执行return (shuLiang(1+1)+1)*2;
求得shuLiang(1);将shuLiang(1)的值返回给ts=0,执行return (shuLiang(0+1)+1)*2;
求得shuLiang(0);将shuLiang(0)的值交给alert(shuLiang(0))结束循环