繁体   English   中英

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

[英]Simple C++ recursion does not work properly - I just don't see why

我有一个小的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

您忘记了基本情况:如果idx为零, arr_sum返回什么?

目前,该函数不返回任何内容,这是非法的。 出现编译器警告,每个编译器都会对此发出警告。 当它执行时,最终会在堆栈上留下一个随机值,该值将被解释为返回值,并添加到其他结果中。

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];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM