Рекурсивная функция с растущими значениями - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь написать рекурсивную функцию для оценки для n

3(2+1)+4(3+2+1)+...+(n+1)(n+...+2+1)

Я знаю, что в общем случае нам нужно записать его в качестве индукции для базового случая, скажем, n = 1, а затем вызвать функцию для n-1, которая в конечном итоге окажется в базовом случае.

Но в следующей функции элементы увеличиваются, как мне подойти к этому

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Вам просто нужно будет поддерживать переменные цикла и счетчик, увеличивая счетчик на каждой итерации, пока он не будет равен n, начиная с n = 0 case (или 1, как угодно).

Затем, когда count == n у вас есть ответ, вы завершаете цикл.

Отсчет вверх вместо вниз характерен для corecursion , при условии, что каждый шаг итерации конечен (здесь, безусловно, так).

0 голосов
/ 01 мая 2018

Это также как и общий способ, который вы упомянули. просто посмотрите на это так:

(n + 1) (n + (n-1) + (n-2) + ... + 1) + (n) ((n-1) + (n-2) + ... + 1) + (n-1) ((n-2) + (n-3) + ... + 1)

поэтому предположим, что у вас есть функция с именем SumTo (n), которая возвращает сумму всех чисел, начиная с 1 до n, это рекурсивная функция:

int Calc(n)
{
   if (n == 3)
     return n(sumTo(2));

   else return n(sumTo(n-1)) * Calc(n-1);
}
...