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案例中,直到你找到基本案例.
您可以添加第三个参数,这是到目前为止计算的运行总计(从中开始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序列中找到一个数字.