c++ - 求奇数之和的递归函数

标签 c++ arrays recursion

程序运行但它也喷出一些其他东西,我不太清楚为什么。第一个输出是正确的,但从那里我不确定会发生什么。这是我的代码:

#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 元素数组中奇数值的数量,我们有以下情况:

  1. 数组为空:结果平凡为 0
  2. 第一个元素是偶数:结果将是数组其余元素的奇数之和
  3. 第一个元素是奇数:结果将这个元素添加到数组其余元素的奇数元素之和

在这个问题中,简单的情况是计算一个空数组的结果,而这个问题的更简单版本是在一个较小的数组上工作。重要的是要理解,为了使递归起作用,更简单的版本必须“更接近”简单的情况。

一旦算法清晰翻译成代码就很简单了:

// 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/

相关文章:

javascript - JavaScript 中 Array.apply 的第一个参数是什么?

entity-framework - EF - 多个包含以急切加载分层数据。不好的做法?

c++ - 如何从文本文件中读取值和数组

c++ - 类方法变量,如果我将它们存储在类本身中会更快吗?

c++ - 如何使用通用模板为类重载运算符?

c++ - 在没有 union 的情况下对来自不同第三方库的两种类型进行双关

SQL Server 将分层 CTE 函数重写为常规 Select

haskell - 有没有更好的方法来编写 "string contains X"方法?

c++ - 在不循环的情况下写入 .oct 文件中的矩阵?

c++ - "Undefined reference to class::function..."- 我链接不正确吗?