c++ - 简单的 C++ 递归不能正常工作——我只是不明白为什么

标签 c++ recursion

我有一个小的 C++ 程序,它应该只是总结一个整数数组的内容。调试输出显示递归函数被正确调用。我什至检查了数组的地址——到处都是一样的。

我不明白为什么那段代码最后会输出这个奇数。我显然做错了什么,但我不明白。有没有人指出正确的方向?

#include <iostream>
using namespace std;

int arr_sum(int arr[], int idx) {
    // debug
    cout << "arr[" << idx << "] = " << arr[idx] << " (" << arr << ")" << endl;

    if (idx > 0) {
        return arr[idx] + arr_sum(arr, idx - 1);
    }
}

int main () {
    int a[10];
    a[0]=1; a[1]=2;a[2]=3;a[3]=4; a[4]=5;
    a[5]=6; a[6]=7;a[7]=8;a[8]=9; a[9]=0;

    cout << a << endl;   // debug
    cout << "Sum: " << arr_sum(a, 9) << endl;
}

输出:

0x7ffc7c3fc7e0
arr[9] = 0 (0x7ffc7c3fc7e0)
arr[8] = 9 (0x7ffc7c3fc7e0)
arr[7] = 8 (0x7ffc7c3fc7e0)
arr[6] = 7 (0x7ffc7c3fc7e0)
arr[5] = 6 (0x7ffc7c3fc7e0)
arr[4] = 5 (0x7ffc7c3fc7e0)
arr[3] = 4 (0x7ffc7c3fc7e0)
arr[2] = 3 (0x7ffc7c3fc7e0)
arr[1] = 2 (0x7ffc7c3fc7e0)
arr[0] = 1 (0x7ffc7c3fc7e0)
Sum: 6295692

最佳答案

if (idx > 0) {
    return arr[idx] + arr_sum(arr, idx - 1);
}

你忘记了终止条件

if (idx > 0) {
    return arr[idx] + arr_sum(arr, idx - 1);
} else return arr[0];

关于c++ - 简单的 C++ 递归不能正常工作——我只是不明白为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37264683/

相关文章:

c++ - C++ 中的 C# 样式枚举

javascript - 将所有奇数斐波那契数相加第 2 部分

java - 为什么这个不复制类,复制内部文件夹

java - 使用递归对数字进行阶乘

c++ - 抑制从 cin 到 cout 的回声

c++ - 静态初始化的非文字对象的销毁顺序

c++ - 函数参数中的C++数组指针

c++ - offsetof 可以与从 decltype 获得的结构类型一起使用吗?

javascript - 仅使用递归 javascript 创建棋盘

mysql - 如何使用 MySQL Workbench 查找字符串中多次出现的子字符串?