按对求和数组的值,直到最终得到所有值的总和

时间:2016-06-03 08:12:33

标签: c++ arrays recursion

所以我需要按对的方式对元素求和,如果数组内有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);
    }
}

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];
}