c++ - 使用递归对数组的正元素求和
问题描述
我正在学习递归并尝试计算数组的正元素的总和,但我不知道该怎么做。谁能帮我?
#include <iostream>
using namespace std;
int sum (int arr[],int n)
{
if(n==-1)
return 0;
/*else if(arr[n]<0)
return arr[n]+sum(arr,n+1) ;*/
else
return arr[n-1]+sum(arr , n-1);
}
int main()
{
int n , arr[n] ;
cout<<"give the value of n : " ; cin>>n;
cout<<"give the values of the array ";
for(int i=0;i<n;i++)
cin>>arr[i];
cout<<"the value of positive elements is : " << sum(arr,n);
return 0;
}
解决方案
您的递归函数应返回以下三个值之一:
- 如果我们已经到达数组的末尾,则返回零
- 否则,如果“当前”数组元素为负数或零,则返回“下一个”递归
- 否则,如果“当前”元素为正,则返回该元素和下一次递归的总和。
在每次递归调用中,我们需要: (a) 增加“当前”元素的索引;(b) 减少数组中剩余的元素数量。对于 (a),我们可以利用作为函数参数传递的数组衰减到指向其第一个元素的指针这一事实,因此我们可以在该指针上添加一个以进行递归调用:
int sum(int arr[], int n)
{
if (n <= 0) return 0; // Reached the end of the array: return zero
if (*arr <= 0) return sum(arr + 1, n - 1); // Non-positive number: skip it
return sum(arr + 1, n - 1) + *arr; // Add this number to the recursion result!
}
随时要求任何进一步的澄清和/或解释。
编辑:另外,如果您坚持使用可变长度数组(VLA - 不是标准 C++),那么您需要在读取用户给出的值int arr[n]
后声明。n
但我建议使用固定(最大)大小,例如:int n, arr[100];
.
推荐阅读
- c# - 如何使用 C# 自动滚动滚动查看器
- css - 如何将最大宽度添加到响应式 iframe?
- hash - 如何找出 CKAN 资源记录返回的哈希类型?
- automation - 如何将自定义数据转储到 google home?
- windows-installer - 卸载父程序时无法卸载链接的程序
- android - 获取预安装的应用程序并由用户安装
- c++ - C++继承模板类:隐藏成员变量
- java - 想要使用循环将数组列表项放入变量中
- java - 为什么我在编译时收到以下错误:“找不到符号 - 方法 toArray()”(java)?
- javascript - 嵌套数组最多 n 个孩子,将其设置为选项