Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单C++;递归不能正常工作-我只是不知道';我不明白为什么 我有一个小的C++程序,它只需总结整数数组的内容。调试输出显示递归函数被正确调用。我甚至还检查了数组的地址——整个数组都是一样的_C++_Recursion - Fatal编程技术网

简单C++;递归不能正常工作-我只是不知道';我不明白为什么 我有一个小的C++程序,它只需总结整数数组的内容。调试输出显示递归函数被正确调用。我甚至还检查了数组的地址——整个数组都是一样的

简单C++;递归不能正常工作-我只是不知道';我不明白为什么 我有一个小的C++程序,它只需总结整数数组的内容。调试输出显示递归函数被正确调用。我甚至还检查了数组的地址——整个数组都是一样的,c++,recursion,C++,Recursion,我不明白为什么代码最后会显示出这个奇数。我显然做错了什么,但我不明白。有人有指向正确方向的指针吗 #include <iostream> using namespace std; int arr_sum(int arr[], int idx) { // debug cout << "arr[" << idx << "] = " << arr[idx] << " (" << arr <<

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

#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;
}

您忘记了基本情况:如果
idx
为零,
arr\u sum
返回什么


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

您忘记了基本情况:如果
idx
为零,
arr\u sum
返回什么

if (idx > 0) {
    return arr[idx] + arr_sum(arr, idx - 1);
}
现在,函数不返回任何内容,这是非法的。打开编译器警告,每个编译器都会对此发出警告。当它执行时,它在堆栈上留下一个随机值,该值被解释为返回值,并添加到其他结果中

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];
你忘了那个案子

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

用调试器一步一步地调试代码,问题会很明显。一个
否则
会起到很大的作用。
arr\u sum(arr,0)
返回什么?问题标题应该实际说明具体的问题行为,否则对其他人来说是无用的。“递归不起作用”不太可能是问题所在。使用调试器逐步完成该代码,问题将是显而易见的。一个
else
会产生很大的不同。什么是
arr_sum(arr,0)
返回?问题标题实际上应该说明具体的问题行为,否则对其他人来说是无用的。“递归不起作用”不太可能是问题所在。我担心它太简单了。是的,非常感谢。编译器警告已打开,顺便说一句(GCC 4.6.3),它似乎没有针对此问题发出警告。我担心它太简单了。是的,非常感谢。编译器警告已打开,顺便说一句(GCC 4.6.3),似乎没有针对此问题发出警告。嗯。。应该是
否则返回arr[0]这将从总和中删除
arr[0]
值。我认为进一步递归的条件应该是
idx>=0
。(当然,在这种情况下,OP必须删除“调试”输出,以免访问arr[-1]),或者实际上,正如@IInspectable所说,
在终止分支中返回arr[0]
。@TerraPass:Nope,
idx>=0
将不起作用,因为对arr\u sum的递归调用将与
idx-1
标记为是,假设您实际上没有访问
arr[-1]
(也就是说,假设您删除了调试输出)。无论如何,
否则返回arr[0]
是一个更干净的解决方案。嗯。。应该是
否则返回arr[0]这将从总和中删除
arr[0]
值。我认为进一步递归的条件应该是
idx>=0
。(当然,在这种情况下,OP必须删除“调试”输出,以免访问arr[-1]),或者实际上,正如@IInspectable所说,
在终止分支中返回arr[0]
。@TerraPass:Nope,
idx>=0
将不起作用,因为对arr\u sum的递归调用将与
idx-1
标记为是,假设您实际上没有访问
arr[-1]
(也就是说,假设您删除了调试输出)。无论如何,
否则返回arr[0]
是一个更干净的解决方案。