浅谈普通递归和尾递归

拼搏现实的明天。 2022-11-15 14:27 317阅读 0赞

问题: 以求解阶乘为例, 普通递归函数和尾递归函数有何不同?

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjA0ODQ2Mw_size_16_color_FFFFFF_t_70

[从递归调用过程来看]

普通递归函数在递归前进阶段中, 不断将规模较大的问题分解为规模较小的同类子问题, 例如计算3!, 我们要先计算 2!, 而计算 2! 又需要计算 1!, 即每一层递归调用的返回结果都依赖于下一层递归调用的返回值. 当问题分解到最简单的情况时(计算 1!), 也就是满足递归终止条件时, 递归调用就进入回归阶段. 在回归阶段中, 计算结果逐层返回. 普通递归调用的特点为得到下一层的返回值后还要在本层进行一次计算, 然后才能将本层计算结果返回至上一层递归调用.

尾递归和普通递归不同, 在递推阶段中, 每次递归调用时都需要做一次乘法运算, 之后将运算结果作为函数的参数传送给下一层递归调用. 当递归终止条件满足时, n!也就计算完毕了, 结果保存在函数的第二个参数中. 此时结果直接返回递归调用过程, 整个递归调用过程随之结束. 由此可见, 尾递归是一种十分特殊的递归方式——它的深层次递归调用面临的不是越来越简单的问题, 而是越来越复杂的问题, 但尾递归简化了递归回归阶段将每一层结果逐层返回的过程(尾递归的计算结果保存在最后一层递归调用函数的参数中): 尾递归最深层函数的参数直接作为递归计算结果返回至主调函数中.

发表评论

表情:
评论列表 (有 0 条评论,317人围观)

还没有评论,来说两句吧...

相关阅读

    相关

    尾递归 如果要说尾递归的话,那么首先应该先说一下递归函数。递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但是循环的逻辑不如递归清晰易理解

    相关 的优化

    在[ 浅谈尾调用和尾递归 ][Link 1]这篇博文中,我谈了什么是尾递归以及编译器如何优化尾递归。这篇文章,咱来个具体的例子,通过汇编代码来看看优化和不优化的区别。 求阶

    相关 python

    递归函数可以方便的处理一些事物,但普通的递归是栈的堆积,如果堆积的过多就占用过多的内存资源,形象的一些递归就是就像是塔一样,从下至上层层叠加,直到,到达python的限制抛出异

    相关

    什么是尾递归 什么是尾递归呢?(tail recursion), 顾名思议,就是一种“不一样的”递归,说到它的不一样,就得先说说一般的递归。对于一般的递归,比如下面

    相关

    尾递归就是说一个递归函数,在return语句中调用了这个递归函数本身,如图所示。从理论上来说,尾递归都可以用非递归的方法实现。 ![这里写图片描述][70] [70]

    相关

    要说尾递归先理解尾调用 尾调用定义 > 来自 [尾调用维基百科][Link 1] 在计算机学里,尾调用是指一个函数里的最后一个动作是返回一个函数的调用结果的情形,即

    相关

    1、递归 简单的来说递归就是一个函数直接或间接地调用自身,是为直接或间接递归。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满