首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归算法

递归算法
EN

Stack Overflow用户
提问于 2011-12-02 22:33:44
回答 3查看 1.5K关注 0票数 3

当我写一个递归程序时,我总是感到困惑,即使是一个小的。

代码语言:javascript
复制
#include <iostream>
using namespace std;

int recursion(int x)
{
    if(x == 0)
        return 0;

    return (x + recursion(x-1));  //recursive function call should always be in the                                        return statement?
}

int main()
{
    cout<<"SUM:"<<recursion(9);
}

有没有其他方法可以使递归函数调用不出现在return语句中

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-02 22:36:45

没有语言规则规定递归调用必须作为return语句的一部分出现。它可以出现在方法中的任何地方(甚至可能出现在几个地方)。

例如:

代码语言:javascript
复制
int recursion(int x)
{
    if (x == 0) return 0;
    int rec = recursion(x-1);
    return x + rec;
}

也就是说,在函数的最后进行递归调用有它的好处:这就是所谓的“尾递归”,一个好的编译器也许能够优化尾递归。

最后,值得一提的是,在您的特定示例(从0n的数字求和)中,递归是完全不必要的。

票数 7
EN

Stack Overflow用户

发布于 2011-12-02 22:59:53

在进行递归时,不要考虑递归。想一想:“啊,在这一点上,调用那个recursion()函数是很实用的”,或者“哦,我可以在这里重用它”。它们是普通的函数调用,就像所有其他调用一样。

递归这个术语不必要地把许多新手搞糊涂了。如果你理解函数和函数调用,你就已经理解了递归,只是你还不知道而已。

票数 3
EN

Stack Overflow用户

发布于 2011-12-02 22:38:12

您不需要将递归函数调用放入return语句中;您只需这样做:

代码语言:javascript
复制
int recursion(int x)
{

    if(x == 0)
        return 0;
    int val = recursion(x-1);
    return (x + rec);  
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8357886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档