数组的递归和

时间:2015-12-31 06:49:53

标签: c arrays recursion sum

我试图打印出我返回的总和的结果但是由于某种原因它打印出0,但是当我检查函数内部的总和时它正确地执行了它的目标。例如,如果我传入一个包含10个项目的数组,每个项目等于它们的索引(0 ... 9),则函数内的总和为45但是当我将它打印回main()时,它会打印0.我' m真的很困惑,至少可以说。

这是我的功能,我打电话使用:

printf("%d\n", addArray3(arrayA, 9, 0));

为了澄清,arrayA是一个指向10项整数数组的指针。

// Sums array using recursion
int addArray3(int (*arrayA)[], int n, int sum){
    if (n<0){
        return sum; 
    } else {
        sum += (*arrayA)[n];
    }
    addArray3(arrayA, --n, sum);
}

如果有人能清楚这一点,我真的很感激,谢谢!

3 个答案:

答案 0 :(得分:2)

你错过了最后一行的回报。编译所有警告,它可能会找到你。

关于此行为的相关问题,涵盖了此处发生的事情(没有回复):Implicit int return value of C function

答案 1 :(得分:0)

通过有效使用指针检查这个修改过的递归函数:

void addArray3(int *arrayA, int n, int* sum){
    if (n<0){
        return;
    } else {
        *sum += arrayA[n];
    }
    addArray3(arrayA, --n, sum);
}

int main ()
{
    int ar[] = { 1, 2, 3};
    int sum = 0;
    addArray3(ar, 2, &sum);
    printf("%d\n",sum);

    return 0;
}

答案 2 :(得分:-1)

在这两种情况下,请尝试这样做:

1)将返回值存储在int t中。

2)直接打印返回值。

#include <stdio.h>

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

//      t = addArray3(a,9,0);
//      printf("%d\n",t);
        printf("%d\n",addArray3(a,9,0));
}

int addArray3(int (*arrayA)[], int n, int sum)
{
        if (n<0)
        {
                return sum;
        }
        else
        {
                sum += (*arrayA)[n];
        }
        addArray3(arrayA, --n, sum);
}