【问题标题】:Unexpected output for a recursive function to compute sum of n numbers递归函数计算 n 个数字之和的意外输出
【发布时间】:2018-03-07 18:24:45
【问题描述】:

我正在尝试编写一个简单的递归函数来计算n 数字的总和。因此,我编写了下面的代码,它运行良好,但是当我尝试在递归函数中打印 sum 时,它(在主函数中)打印一个随机数。

int SumRec(int n, int sum)
{
    sum+=n;
    if(n==1)
        return sum;
    else
        SumRec(n-1,sum);
    cout<<sum<<endl;
}

int main()
{
    cout<<SumRec(2,0)<<endl;

    return 0;
}

【问题讨论】:

  • SumRec 并不总是返回承诺的int。这会对程序造成严重破坏。谁知道会发生什么。
  • 你需要注意那个编译器警告说“不是所有的代码路径都在非空函数中返回一个值”
  • 请注意,执行此类操作的递归函数通常非常糟糕。堆栈空间只有这么多。
  • 无论那条线如何,它都有未定义的行为,但只有在该线出现时,您才能观察到它。正如其他人指出的那样,您不会通过if 的每个分支返回int,只有一个,因此它会返回n!=1 的垃圾。打开所有编译器警告以捕捉像这样的简单错误。
  • @tadman 好的,我现在知道了....非常感谢您的帮助,

标签: c++ recursion


【解决方案1】:

您应该确保SumRec 返回一个整数值,只要您在声明时承诺。我看到如果n == 1 它返回sum,否则不会!所以你应该让它看起来像:

int SumRec(int n, int sum){
    sum += n;
    if(n == 1)
        return sum;
    else
        sum = SumRec(n - 1, sum);

    cout << sum << endl;
    // when done from recursion i should return a value as i promised
    return sum;   
}

【讨论】:

    猜你喜欢
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2013-11-26
    相关资源
    最近更新 更多