C中数组的递归和

Mee*_*cus 2 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;

}
Run Code Online (Sandbox Code Playgroud)

而我的递归功能:

//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);
}
Run Code Online (Sandbox Code Playgroud)

输出是:

sum is :0 
Run Code Online (Sandbox Code Playgroud)

imr*_*ran 14

试试这个递归函数:

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

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


ale*_*lex 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);
}
Run Code Online (Sandbox Code Playgroud)

或者,您将其更改为不需要sum像这样传递变量.

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

    if (n < 0) {
         return sum;
    }

    return arr[n] + arr_sum(arr, n - 1);
}
Run Code Online (Sandbox Code Playgroud)

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