Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Arrays_Recursion - Fatal编程技术网

C-数组的递归累积和

C-数组的递归累积和,c,arrays,recursion,C,Arrays,Recursion,我的任务是创建一个递归函数,它接受一个数字数组,并将其转换为一个数组,该数组包含到目前为止所有数字的累积和,因此: 1,2,3,4,5变为1,3,6,10,15 这就是我想到的: #include <stdio.h> int cumul(int tab[], int length, int ind) { if (ind > 0) { tab[ind] += tab[ind-1]; } if (ind < length) {

我的任务是创建一个递归函数,它接受一个数字数组,并将其转换为一个数组,该数组包含到目前为止所有数字的累积和,因此:

1,2,3,4,5变为1,3,6,10,15

这就是我想到的:

#include <stdio.h>

int cumul(int tab[], int length, int ind) {

    if (ind > 0) {
        tab[ind] += tab[ind-1];
    }
    if (ind < length) {
        cumul(tab, length, ind+1);
    }
    return 0;
}

int main() {
    int ind;
    int tab[6] = {1, 2, 3, 4, 5, 6};
    int length = sizeof(tab)/sizeof(tab[0]);

    for (ind = 0; ind < length; ind++) {
        printf("%d ", tab[ind]);
    }
    printf("\n");

    cumul(tab, length, 0);

    for (ind = 0; ind < length; ind++) {
    printf("%d ", tab[ind]);
    }
    printf("\n");
    return 0;
}

我不知道为什么会发疯。它适用于我尝试的任何tab[5]和tab[7]数组,但对于我尝试的每个tab[6]数组都失败。

ind
达到
length-1
时,就会出现问题。例如,如果
length
为6,而
ind
为5,则递归调用为

cumul(tab, 6, 6);  // length=6 ind+1=6
在下一级递归中,在
if(ind>0)
之后,代码将执行此操作

tab[6] += tab[5];  // ind=6 ind-1=5 
这会导致未定义的行为,因为您的写入超出了数组的末尾

您可以检查第一个
if
语句中的上限,例如

if ( ind > 0 && ind < length )
这两种更改都可以避免访问
选项卡[长度]
的情况

if ( ind > 0 && ind < length )
if ( ind < length - 1 )