用递归方法求一个数组前n个数字的和

  1. /*
  2. 数组求和
  3. */  
  4. int sumOfArray(int a[],int n) {   
  5.     if(n==1) return a[0];   
  6.     else return (a[n-1]+sumOfArray(a,n-1));   
  7. }   
  8.   
  9. /*   
  10. 数组求最大值
  11. */  
  12. int maxOfArray(int a[],int n) {   
  13.     if(n==1) return a[0];   
  14.     else {   
  15.         int temp=maxOfArray(a,n-1);   
  16.         return ( temp>=a[n-1]?temp:a[n-1] );   
  17.      }   
  18. }   

  19. /*   
  20. 数组求算术平均值   法一
  21. */  
  22. float arithAverageOfArray(int a[],int n) {   
  23.     return (float)sumOfArray(a,n)/(float)n;   
  24. }   
  25.   
  26. /*   
  27. 数组求算术平均值   法二
  28. */  
  29. double arithAverageOfArray2(int a[],int n) {      
  30.     if(n==1) return a[0];   
  31.     else return a[n-1]/n+ ( arithAverageOfArray2(a,n-1)*(n-1) )/n;   
  32. }   
     转自http://hi.baidu.com/python811022/item/4661290d871fdb813c42e20e
使用递归方法 N 个数中的最大数及其位置可以通过以下思路实现:将问题逐步分解为子问题,每次比较当元素剩余元素中的最大值,从而确定整个数组的最大值及其位置。 以下是两种不同的实现代码示例: ### 示例一 ```cpp #include <iostream> using namespace std; // 递归函数,用于返回数组中最大值的位置 int MaxIndex(int* A, int n) { if (n == 1) return 0; int p = MaxIndex(A + 1, n - 1); return A[0] > A[p + 1] ? 0 : p + 1; } int main() { int A[] = {7, 4, 2, 8, 0, 5}; int len = sizeof(A) / sizeof(A[0]); int Index = MaxIndex(A, len); // 输出最大值的位置最大值 cout << Index << " " << A[Index] << endl; return 0; } ``` 此代码定义了`MaxIndex`函数,用于递归地找出数组中最大值的位置。在`main`函数中调用该函数输出最大值的位置最大值。其时间复杂度为$O(n)$,因为每次递归调用都会减少一个元素进行比较,直到只剩下一个元素[^1]。 ### 示例二 ```cpp #include <iostream> #include <bits/stdc++.h> using namespace std; // 递归函数,用于返回一个包含最大值位置最大值的数组 int *getMax(int n, int all) { int num, *b, *a; cin >> num; if (n == 1) { a = new int[2]; a[0] = all - n + 1; a[1] = num; return a; } b = getMax(n - 1, all); if (b[1] < num) { b[1] = num; b[0] = all - n + 1; } return b; } int main() { int n, *a; cin >> n; a = getMax(n, n); // 输出最大值的位置最大值 cout << a[0] << " " << a[1] << endl; return 0; } ``` 该代码定义了`getMax`函数,通过递归不断读取输入的数字比较当数字找到的最大值,最终返回包含最大值位置最大值的数组。在`main`函数中调用该函数输出结果[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值