当前位置:  开发笔记 > 编程语言 > 正文

尾递归调用(C primer plus book example)

如何解决《尾递归调用(Cprimerplusbookexample)》经验,为你挑选了0个好方法。

在C Primer Plus(第6版)中,它 以这种方式定义尾递归概念:

在最简单的递归形式中,递归调用位于函数的末尾,就在return语句之前.这称为尾递归或结束递归,因为递归调用最后会发生.尾递归是最简单的形式,因为它就像一个循环.

它给出了以尾递归方式计算阶乘的示例:

long rfact(int n) {
    long ans;
    if (n > 0)
        ans = n * rfact(n - 1);
    else
        ans = 1;
    return ans;
 }

它也是一个侧面说明,在我看来这是不正确的:

请注意,虽然对rfact()的递归调用不是函数中的最后一行,但它是n> 0时执行的最后一个语句,因此它是尾递归.

可以清楚地看到,最后一个语句是n * rfact(n - 1),如果递归扩展,它将导致一系列延迟乘法.该过程在本质上是递归的,从而所描述的实现不能尾递归这里.

这个例子具有误导性.你有什么意见?

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有