最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 面试官:递归是个什么东东?

    正文概述 掘金(公众号_人生代码)   2021-02-04   514

    面试官:递归是个什么东东?

    今天的主题本来是两个:

    • 递归
    • 堆栈 但是由于篇幅太长,我们分为两部分进行,今天先来讲讲递归,我们平常可能会用到递归,简单来说就是自己调用自己,例如,我们的递归组件,递归函数求和,等等。但是我们从来没有仔细研究下这递归到底有什么优缺点?

    本文你应该带着两个问题进行阅读

    • 什么是递归
    • 如何使用递归

    什么是递归

    递归是一种编程模式,在一种任务可以自然地拆分为相同类型的多个任务,但更简单的情况下很有用。或者,当一个任务可以简化为一个简单的动作以及该任务的一个更简单的变体时。或者,正如我们将很快看到的那样,处理某些数据结构。

    当一个函数解决任务时,在此过程中它可以调用许多其他函数。这种情况的部分情况是函数调用自身时。这就是所谓的递归。

    两种思维方式

    举个简单的例子,比如我们求 x 的 n 次幂,这个时候我们可能需要用到递归:

    pow(2, 2) = 4
    pow(2, 3) = 8
    pow(2, 4) = 16

    第一种,迭代思维

    最经常使用就是使用 for 循环:

    function pow(x, n) {
      let result = 1;

      // multiply result by x n times in the loop
      for (let i = 0; i < n; i++) {
        result *= x;
      }

      return result;
    }

    alert( pow(2, 3) ); // 8

    第二种,递归思维

    function pow(x, n) {
      if (n == 1) {
        return x;
      } else {
        return x * pow(x, n - 1);
      }
    }

    alert( pow(2, 3) ); // 8

    值得注意的是,递归变体在本质上是不同的。

    当pow(x, n)被调用时,执行分成两个分支:

                  if n==1  = x
                 /
    pow(x, n) =
                 \
                  else     = x * pow(x, n - 1)
    • 如果为n == 1,那么一切都是微不足道的。之所以称为递归基础,是因为它立即产生明显的结果:pow(x, 1)equals x
    • 否则,我们可以表示pow(x, n)x * pow(x, n - 1)。在数学中,人们会写。这称为递归步骤:我们将任务转换为更简单的动作(乘以)和对同一任务的更简单调用(使用)。接下来的步骤进一步和进一步简化,直到达到 n == 1。

    面试官:递归是个什么东东?

    我们也可以说pow 递归调用自己直到n == 1

    例如,要计算pow(2, 4)递归变量,请执行以下步骤:

    pow(2, 4) = 2 * pow(2, 3)
    pow(2, 3) = 2 * pow(2, 2)
    pow(2, 2) = 2 * pow(2, 1)
    pow(2, 1) = 2

    因此,递归将函数调用简化为一个更简单的函数调用,然后再简化为一个更简单的函数,依此类推,直到结果变得明显为止。

    递归通常较短

    递归解通常比迭代解短。

    function pow(x, n) {
      return (n == 1) ? x : (x * pow(x, n - 1));
    }

    嵌套调用(包括第一个)的最大数量称为递归深度。在我们的情况下,它将是n

    最大递归深度受JavaScript引擎限制。我们可以依靠它为10000,某些引擎允许更多,但是对于大多数引擎来说100000可能已超出限制。有一些自动优化可以帮助缓解这种情况(“尾部优化”),但是尚无处支持它们,并且仅在简单情况下有效。

    那限制了递归的应用,但是它仍然非常广泛。在许多任务中,递归思维方式使代码更简单,更易于维护。


    起源地下载网 » 面试官:递归是个什么东东?

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元