2014-02-09 2 views
-1

Я немного застрял здесь. Я знаю, что конкретное число Фибоначчи можно найти рекурсивно так:Найти сумму чисел фибоначчи рекурсивно

int fib (int n) 
{ 
    if (n <= 1) 
     return n; 

    else 
     return fib(n-1) + fib(n-2); 
} 

И я знаю, итеративно я мог бы назвать, что функция п раз, чтобы найти сумму чисел Фибоначчи

int sum = 0; 
for (int i = 0; i < n; i++) 
{ 
    sum += fib(i); 
} 

Но у меня трудное время придумывает рекурсивную функцию, чтобы найти сумму. Я не думаю, что это будет сильно отличаться от оригинальной функции фибоначчи. (Это для назначения, направленного на улучшение моей способности писать OCAML синтаксиса, а не писать рекурсивные функции)

+1

Пытались ли вы Google это? – alfasin

+2

Да, совсем немного. – user2079802

+0

странно, учитывая, что google возвращает 321 000 результатов для «рекурсии фибоначчи» – alfasin

ответ

2

Поскольку никто не беспокоит, чтобы ответить на ваш вопрос, здесь вы идете:

int fib_sum(int n) 
{ 
    if (n == 0) 
     return 0; 
    if (n == 1) 
     return 1; 
    return fib_sum(n-1) + fib_sum(n-2) + 1; 
} 
2

Если вы хотите рекурсивное решения с участием только fib_sum(), вот один:

int fib_sum (int n) 
{ 
    if (n == 0) 
     return 1; 
    if (n == 1) 
     return 2; 
    return fib_sum(n-1) + fib_sum(n - 2) + 1; 
} 
+0

Но, конечно, 'fib_sum (0)' должно быть '0', а' fib_sum (1) 'должно быть' 1'. – ooga

+0

Я предположил, что OP начинается с fib (0) = 1, fib (1) = 1, fib (2) = 2, ... – twin

+0

Это было бы необычно: [Fibonacci Number] (http: //en.wikipedia. орг/вики/Fibonacci_number) – ooga

3

Замечая, что fib_sum (n) == fib (n + 2) - 1 вы можете использовать более или менее ту же функцию.

Смежные вопросы