程序运行但它也喷出一些其他东西,我不太清楚为什么。第一个输出是正确的,但从那里我不确定会发生什么。这是我的代码:
#include <iostream>
using namespace std;
const int MAX = 10;
int sum(int arrayNum[], int n)
{
int total = 0;
if (n <= 0)
return 0;
else
for(int i = 0; i < MAX; i ++)
{
if(arrayNum[i] % 2 != 0)
total += arrayNum[i];
}
cout << "Sum of odd integers in the array: " << total << endl;
return arrayNum[0] + sum(arrayNum+1,n-1);
}
int main()
{
int x[MAX] = {13,14,8,7,45,89,22,18,6,10};
sum(x,MAX);
system("pause");
return 0;
}
最佳答案
术语递归意味着(在最简单的变体中)通过将问题简化为同一问题的更简单版本来解决问题,直到变得微不足道。在你的例子中......
要计算 n
元素数组中奇数值的数量,我们有以下情况:
- 数组为空:结果平凡为 0
- 第一个元素是偶数:结果将是数组其余元素的奇数之和
- 第一个元素是奇数:结果将这个元素添加到数组其余元素的奇数元素之和
在这个问题中,简单的情况是计算一个空数组的结果,而这个问题的更简单版本是在一个较小的数组上工作。重要的是要理解,为了使递归起作用,更简单的版本必须“更接近”简单的情况。
一旦算法清晰翻译成代码就很简单了:
// Returns the sums of all odd numbers in
// the sequence of n elements pointed by p
int oddSum(int *p, int n) {
if (n == 0) {
// case 1
return 0;
} else if (p[0] % 2 == 0) {
// case 2
return oddSum(p + 1, n - 1);
} else {
// case 3
return p[0] + oddSum(p + 1, n - 1);
}
}
递归是一个需要了解的强大工具,您应该尝试理解这个示例,直到 100% 清楚它是如何工作的。尝试从头开始重写它(我不是说你应该记住它,只是在你阅读并认为你理解解决方案后尝试重写它)然后尝试解决这个问题的小变化。
再多的阅读也无法弥补编写代码的不足。
关于c++ - 求奇数之和的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16662351/