C中数组的递归和

时间:2013-04-04 03:20:07

标签: c arrays recursion sum

您好我正在学习C中的递归,我正在尝试找到元素的总和。

这是我的主要内容:

int main()
{


    int arr[] = {1,2,3,4,5};
    int sum;
    sum = arr_sum(arr,4);
    printf("\nsum is:%d",sum);



    return 0;

}

我的递归函数:

//n is the last index of the array

int arr_sum( int arr[], int n )
{ // must be recursive

    int sum = 0;
    //base case:
    if (n < 0) {
        return sum;
    } else{
        sum = sum + arr[n];
    }
    //make problem smaller
    arr_sum(arr,n-1);
}

输出结果为:

sum is :0 

5 个答案:

答案 0 :(得分:14)

试试这个递归函数:

int arr_sum( int arr[], int n ) { 
  if (n < 0) {
    //base case:
    return 0;
  } else{
    return arr[n] + arr_sum(arr, n-1);
  }
}

你需要将你的第n个案例添加到你的n-1案例中,直到你找到基本案例。

答案 1 :(得分:5)

你可以添加第三个参数,这是到目前为止计算的运行总数(从0开始)。

递归调用函数时,传递运行总计。

int arr_sum( int arr[], int n, int sum )
{ // must be recursive

    if (n < 0) {
         return sum;
    }

    sum += arr[n];

    return arr_sum(arr, --n, sum);
}

或者,您可以将其更改为不需要传递sum变量。

int arr_sum( int arr[], int n )
{ // must be recursive

    if (n < 0) {
         return sum;
    }

    return arr[n] + arr_sum(arr, n - 1);
}

这样,它类似于在Fibonacci序列中找到一个数字。

答案 2 :(得分:3)

尝试此程序的修改版本,并以笔/纸的方式进行处理。希望它有所帮助。

#include <stdio.h>

//n is the last index of the array
int
arr_sum(int arr[], int n )
{
    //base case:
    if (n == 0) {
        return arr[0];
    }

    return (arr[n] + arr_sum(arr,n-1));
}

int
main(void)
{
    int arr[] = {1,2,3,4,5};
    int sum;

    sum = arr_sum(arr,4);
    printf("\nsum is:%d\n",sum);

    return 0;
}

答案 3 :(得分:1)

你没有从其他部分归还任何东西。你也从那里回来了。 等。

return arr_sum(arr,n-1)+arr[n];

所以这会一次又一次地调用该函数,直到n为零。

你知道了吗?

答案 4 :(得分:0)

代码的问题在于,每次递归函数调用时,它都会将总和初始化为0

在解决问题的递归方法之外声明sum