Рекурсия, складывание 3 предыдущих чисел ( нечто похожее на Фибоначчи) - C (СИ)
Формулировка задачи:
Доброго времени суток. Использую рекурсию чтобы решить следующую задачу:
foo(0)=2
foo(1)=3
foo(2)=5
foo(n)= foo(n−1)+ foo(n−2)+ foo(n−3)
Т.е. получаем такую последовательность:
"2 3 5 10 18 33 61 112 ..."
Вот примерны код, который я модифицировал. При n=5 мне необходимо получить "18", а я "1 теряю и дальше уже отклонение идет:
#include <stdio.h> #include <stdlib.h> int fib(int n); int _fib(int n,int n3, int n2, int n1); int fib(int n){ return _fib(n,5,3,2); } int _fib(int n,int n3, int n2, int n1){ if (n==0){ return 1; } else if(n == 1){ return n1; } else if(n == 2){ return n2; } else if(n==3){ return n3; } else{ return _fib(n-1, n1 +n2+n3 ,n2 + n1,n1); } } int main(){ printf("%d\n", fib(5)); return 0; }
up.
В чем причина того, что 4 элемент уже отклоняется?
Решение задачи: «Рекурсия, складывание 3 предыдущих чисел ( нечто похожее на Фибоначчи)»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> int superFib(int n, int c, int p, int pp) { switch (n) { case 3: return c; case 2: return p; case 1: return pp; default: return superFib(n-1,c+p+pp,c,p); } } int main(int argc, char *argv[]) { int n; printf("n="); scanf("%d",&n); printf("%d\n",superFib(n,5,3,2)); system("PAUSE"); return 0; }
Объяснение кода листинга программы
В этом коде реализована функция superFib(), которая вычисляет число в последовательности, похожей на Фибоначчи, но с определенными особенностями. В функции superFib() используются четыре параметра:
- n - номер числа в последовательности, которое нужно вычислить.
- c - первое число в последовательности.
- p - второе число в последовательности.
- pp - третье число в последовательности. Функция superFib() использует оператор switch для определения номера числа в последовательности, которое нужно вычислить. Если n=3, функция возвращает значение c. Если n=2, функция возвращает значение p. Если n=1, функция возвращает значение pp. Если n больше 3, функция рекурсивно вызывает саму себя, передавая в качестве параметров n-1, c+p+pp, c, p. В функции main() происходит следующее:
- Пользователю предлагается ввести значение переменной n.
- Значение n передается в функцию superFib(), которая возвращает результат вычисления числа в последовательности.
- Результат выводится на экран.
- Пользователю предлагается нажать любую клавишу, чтобы продолжить выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д