Простая программа рекурсивного суммирования


Любые советы о том, как улучшить это простая программа рекурсии?

#include <iostream>
#include <cstdlib>

using namespace std;

int findSum(int*, const int, int, int);

int main()
{
    int length = 5, sum = 0, n = 0;
    int list[length];


    for (n; n < length ; n++ )
    {
     list[n] = n + 1; //initializes array elements to 1,2,3,4,5
    }

    n = 0; 

    cout << findSum(list, length, n, sum) << endl;

    system("pause");
    return 0;
}

int findSum(int list[], const int length, int n, int sum)
{
    if (n == length) //if end of list has been reached, stop recursion
    {
        return sum;
    }
    else 
    {
        sum += list[n]; //adds list elements
        n++;            //increments list
        return findSum(list, length, n, sum);
    }
}


314
4
задан 11 октября 2011 в 10:10 Источник Поделиться
Комментарии
1 ответ

Я думаю, что я бы предпочел что-то вроде этого:

int findsum(int const *list, int length) { 
if (0 == length)
return 0;
return list[0] + findsum(list+1, length-1);
}

Это следует одно из типичных рекурсивной формулировки-в основном функция это почти как индуктивное доказательство. Начните с установления правильного значения для самой простой базовой комплектации (или некоторые очевидные базовом варианте во всяком случае), а затем создать схему, которая необходимая для некоторых своего рода "базовый+1" тип корпуса.

6
ответ дан 11 октября 2011 в 10:10 Источник Поделиться