递归实例分析

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))结束循环

原文地址:https://www.cnblogs.com/NCL--/p/7043697.html