专栏首页闻道于事JavaScript函数之递归

JavaScript函数之递归

递归

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

递归的定义(摘):

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

构成递归需具备的条件:

1. 子问题须与原始问题为同样的事,且更为简单。

2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。

 首先用普通方式来解决问题:

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

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

如果用for循环来解决问题,我们需要定义一个循环,循环六次,也就是六天,循环(前一天数量=当天数量加一乘以二),得出结果。

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

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

在这里我们首先要明确:当天的数量=(下一天数量+1)*2

然后明确函数:给一个天数,返回该天剩余的数量

函数思路:

如果天数是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

函数执行时,ts=3,然后进入函数

第一次计算:

ts不等于6,过

调用函数自身,ts=4,继续函数

第二次计算:

ts不等于6,过

调用函数自身,ts=5,继续函数

第三次计算:

ts不等于6,过

调用函数自身,ts=6,继续函数

第四次计算:

ts等于6,返回1

第四次计算返回1到第三次计算中,

第三次计算返回(1+1)*2=4到第二次计算中,

第二次计算返回(4+1)*2=10到第一次计算中

第一次计算返回(10+1)*2=22

得出第三天数量是22

使用递归的思路求文件夹下文件的数量

函数功能:给一个文件夹的路径,返回给文件夹下文件的数量

    function shuLiang(文件夹路径){
        var sum=0;
        if(是文件){
            sum++;
        }else{
            sum=sum+shuLiang(文件夹路径);
        }
    }

打开文件夹

如果遇到的是文件,数量+1

如果遇到的是文件夹,执行函数,打开文件夹,如果遇到的是文件,数量+1,如果遇到的是文件夹,执行函数……

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java常用工具类之时间转换

    import java.text.DecimalFormat; import java.text.ParseException; import java...

    二十三年蝉
  • Java常用工具类之删除文件

    package com.wazn.learn.util; import java.io.File; /** * 删除文件工具类 * @author ...

    二十三年蝉
  • Spring Security + JWT实现前后端分离权限认证

    现在国内前后端很多公司都在使用前后端分离的开发方式,虽然也有很多人并不赞同前后端分离,比如以下这篇博客就很有意思:

    二十三年蝉
  • 为什么我写的程序有bug(一):逻辑篇

    逻辑性错误也是出现bug的重灾区,有很多是因为逻辑性比较复杂,这个倒是可以理解。但是,很多时候出现的问题查了半天最后真想给自己一巴掌。人傻没办法,自己折腾自己。...

    open
  • 这样使用df和du命令更完美

    通常我们在 Unix or Linux 服务器上查看磁盘空间和文件空间占用都会用到df和du这两个常用的目录。

    后场技术
  • 大楼的基石 数据类型 变量与常量

    从本章开始,我们要开始最激动人心的学习啦,敲代码,没有准备好的同学快去看以前的教程(老规矩 从HelloWorld开始吧),把环境搭好,老司机要开车咯~滴~滴滴...

    用户5745563
  • ODL应用案例之云和网络功能虚拟化应用案例

    概述 近年来,大公司和中小企业已经认识到云计算技术是提高自己的竞争力的核心技术。混合云和公共云虽然具备了提高业务灵活性并降低总成本的潜力,但它们对于传统网络的需...

    SDNLAB
  • 刚入门的小伙伴不可错过!金牌讲师讲解Python基础知识点之序列

    云飞
  • Python安装和使用

    点击 Customize installation进入一步(方便我们自定义安装路径)

    Python知识大全
  • ODL应用案例之云和网络功能虚拟化应用案例

    概述 近年来,大公司和中小企业已经认识到云计算技术是提高自己的竞争力的核心技术。混合云和公共云虽然具备了提高业务灵活性并降低总成本的潜力,但它们对于传统网络的需...

    SDNLAB

扫码关注云+社区

领取腾讯云代金券