所以我需要按对的方式对元素求和,如果数组内有12个值([1],[2],[3] ... [12]),则必须显示6个结果然后求和再次通过对最终显示整个数组的结果。
看起来它必须是递归的,并且成对地对数组上的每个值求和。
我对如何实施它没有任何想法,请帮助,请。
#include "stdafx.h"
#include <conio.h>
#include <stdlib.h>
#include <ctime>
#include <iostream>
using namespace std;
int sum(int array[], int size);
int main()
{
cout << "Size of Array: "; int size; cin >> size;
int *array = new int[size], Max = 100;
srand(time(NULL));
//Inputing array.
cout << "Enter elements of array followed by spaces: ";
for (int i = 0; i < size; i++)
{
array[i] = (int)(rand() % Max);
}
for (int i = 0; i < size; i++)
{
cout << array[i] << "\t";
}
cout << "Sum of elements of array: " << sum(array, size) << endl;
return 0;
}
//Function.
int sum(int array[], int counter)
{
if (counter == 1)
return array[0];
else
{
return array[0] + sum(array + 1, counter - 1);
}
}
答案 0 :(得分:3)
显然,这是家庭作业,所以我不在这里提供解决方案,只是提示如何到达那里。
这里的递归是对相邻的数组元素对进行求和,得到 new array 的一半大小。重复该过程,直到大小为1并获得总和。
这可以通过就地工作来实现,即没有多个阵列。工作马功能的签名可能如下所示:
int // return: size of array on output
sum_pairs(int*array, // in/out: array, on output sum of pairs
int size) // input: size of array on input
{
if(size<=1) return size;
int out_size = (size+1)/2;
// your code here
return out_size;
}
然后最后的工作是微不足道的
int sum_of_array(int*array, int size)
{
size = sum_pairs(array,size);
return size<=1? array[0] : sum_of_array(array,size); // recursive call
}
实际上更容易进行这种无递归:
int sum_of_array(int*array, int size)
{
while(1 < size=sum_pairs(array,size)) ;
return array[0];
}