我对创建数组、指针和递归函数的参数感到非常困惑,但我必须在 C++ 中创建以下程序: 设计一个名为 sum 的函数,给定一个整数“a”指针,该指针指向数组的第一个位置numbers 整数和具有给定数组长度的整数“n”,使用递归函数返回其所有值的总和。
接下来设计一个程序,读取一个整数n,表示接下来要读取的值的个数,然后读取n个值存入一个数组。最后,它在屏幕上显示数组所有值的总和结果。
输入示例 1
0
输出示例 1
0
输入示例 2
4 1 2 3 4
输出示例 2
10
该程序的基本结构是这样的:
#include <iostream>
#include <string>
using namespace std;
int sum(int a, int n);
int main(){
int n=0;
cin >> n;
}
int sum(int a, int n){
}
递归一开始可能非常复杂,但编程的实践和一致性会让它每次看起来都更容易。
在我看来,我可以说递归有两个重要的部分。
基本情况:通常是一个条件(
if
),指示/返回我们递归函数的最终值。例如,在您的情况下,您有输入数据,其中0
是递归的最终值。主体或递归:这可能是最复杂的部分,因为这是我们必须调用函数的地方,实现实现目标的逻辑。从同一函数调用所述函数可以是 1、2、3 ......并且可以根据您的问题需要多次(有时我在 ACM 中使用了 8 次)。
您的问题的解决方案
现在我们来分析一下:
Case 1
n=0
a=[]
call to function
sum(a,n)
=>sum([],0)
说明:
n
等于 0 进入条件(基本情况) if 并返回0
结论:它适用于 case 1
案例2 n=4
a=[2,4,1,3] //我只为例子
第1个函数调用
sum(a,n)
改了=>sum([2,4,1,3],4)
解释:n=4进入body
返回sum(a,n-1)+a[ n-1] 等于: sum([2,4,1,3],3)+a[3]
等于: sum([2,4,1,3],3)+ 3 / /这里再次调用相同的函数
2nd function call
sum(a,n)
=>sum([1,2,3,4],3)
解释:n=3 进入body
返回 sum(a,n-1)+a[n-1] 等于:sum([2,4,1,3],2)+ a [2]
等于: sum([2,4,1,3],2)+ 1 //这里又调用了同一个函数
第三次函数调用
sum(a,n)
=>sum([1,2,3,4],2)
解释:n=2 进入体
返回 sum(a,n-1)+a[n-1] 等于:sum([2,4,1,3],1)+ a [1]
等于: sum([2,4,1,3],1)+ 4 //这里又调用了同一个函数
第 4 次函数调用
sum(a,n)
=>sum([1,2,3,4],1)
解释:n=1 进入正文
返回 sum(a,n-1)+a[n-1] 等于:sum([2,4,1,3],0)+ a [0]
等于: sum([2,4,1,3],0)+ 2 //这里又调用了同一个函数
第 5 次函数调用
sum(a,n)
=>sum([1,2,3,4],0)
解释:n=0 进入基本情况
返回 0;// 结束递归
尽量让它通俗易懂,希望对你有所帮助。