zoukankan      html  css  js  c++  java
  • 浅谈尾调用和尾递归

    浅谈尾调用和尾递归

    本文主要讲述尾调用、尾递归的定义以及在实际中遇到的场景,仅为个人浅薄见解。
    尾调用,指一个函数在结束操作即最后一步去调用另一个函数。
    尾递归,实际上就是尾调用,区别就在于递归二字,总所周知,函数的递归即自己调用本身。因此尾递归就是函数在执行到最后一步的操作调用本身。
    下面我们就通过具体的例子来加深一下印象:

    function f(x){ return g(x);}
    function g(x){ console.log(‘我被调用了!’); }
    

    上面的例子中f(x)在最后一步调用了另一个函数g(x),这就是典型的尾调用。而尾递归的范例就是f(x)在最后一步的操作调用自身,如下:

    function f(x){ return f(x);}
    

    那下面这种情况呢?它属于尾调用么???

    function f(x){ return g(x)+1;}
    function g(x){ return x+2; }
    

    实际上上述的情况就不再符合尾调用的定义了。为什么呢?我们来细细拆分一下。
    f(x)在最后一步调用了g(x),但是在执行完g(x)函数后下一步又返回了f(x)中又执行加1的操作。也就是说上述的函数在最后操作的是加1的操作,而不是调用一个函数的步骤。因此上述案例不是尾调用。同理,尾递归也一样。

  • 相关阅读:
    Vim学习指南
    frambuffer lcd.c
    工控显示界面
    ubuntu nfs 开发板
    java初学1
    使用多态来实现数据库之间的切换
    Space Shooter 太空射击
    CandyCrush 糖果传奇
    进制转换以及原码、反码、补码
    winform小知识
  • 原文地址:https://www.cnblogs.com/min77/p/14816478.html
Copyright © 2011-2022 走看看