2

こんにちは、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 
4

5 に答える 5

14

Try this for your recursive function:

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

you need to add your n-th case to your n-1 case until you get to the base case.

于 2013-04-04T03:31:25.760 に答える
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;
}
于 2013-04-04T03:44:19.663 に答える