javascript的递归

一、递归

递归的本质就是使用函数自身来解决问题的思路。

程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

 

有一堆桃子,猴子每天吃一半扔一个,第六天剩余1个,问开始有多少桃子

 

    var t=1;
    for(i=0;i<6;i++){
        t=(t+1)*2;
    }
    alert(t);

 

 

 

如果使用递归求第三天的数量:

复制代码
    //递归
    //当天数量=(下一天数量+1)*2
    //函数明确:给一个天数,返回该天剩余数量
    function shuLiang(ts){
        if(ts==6){
            return 1;
        }
        return (shuLiang(ts+1)+1)*2;
    }
    alert(shuLiang(3));
复制代码

函数思路:

如果天数是6,返回1。

返回:当天数量=(下一天数量+1)*2

函数的运行过程是:

复制代码
    //天数3,开始第一次计算
    function shuLiang(3){
        if(ts==6){
            return 1;
        }//天数不等于6,跳过
        return (shuLiang(3+1)+1)*2;//调用自身,天数=3+1,继续函数
    }
    //天数为4,第二次计算
        function shuLiang(4){
        if(ts==6){
            return 1;
        }//天数不等于6,跳过
        return (shuLiang(4+1)+1)*2;//调用自身,天数=4+1,继续函数
    }
    //天数为5,第三次计算
        function shuLiang(5){
        if(ts==6){
            return 1;
        }//天数不等于6,跳过
        return (shuLiang(5+1)+1)*2;//调用自身,天数=5+1,继续函数
    }
    //天数为6,第四次计算
        function shuLiang(3){
        if(ts==6){
            return 1;
        }//天数等于6,返回1
    }
    //第四次计算返回1到第三次计算中
        function shuLiang(5){
        return (1+1)*2;//天数等于1,返回(1+1)*2=4
    }
    //第三次计算返回4到第二次计算中
        function shuLiang(4){
        return (4+1)*2;//天数等于4,返回(4+1)*2=10
    }
    //第二次计算返回10到第一次计算中
        function shuLiang(3){
        return (10+1)*2;//天数等于10,返回(10+1)*2=22
    }
    //最后,返回第三天的数量为22

 

原文地址:https://www.cnblogs.com/qdlj/p/7045459.html