C-数组的递归累积和
我的任务是创建一个递归函数,它接受一个数字数组,并将其转换为一个数组,该数组包含到目前为止所有数字的累积和,因此: 1,2,3,4,5变为1,3,6,10,15 这就是我想到的: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) {
#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 )