Написать рекурсивную функцию вычисления чисел Фибоначчи - C (СИ)
Формулировка задачи:
Мне нужно написать рекурсивную функцию вычисления чисел Фибоначчи, основанную на рекуррентных формулах:
F(2n) = 2F(n + 1)F(n) − F(n)2 F(n)2 - это степень 2
F(2n + 1) = F(n + 1)F(n) + 2F(n)2 + ( − 1)n. ( − 1)n. - это в степени n
Вот мой код но он не работает, выдает переполнение стека.
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <math.h> long int F(int n) { int k=0,i=0; for(i=0;i<2;i++) { k++; if (n==0) return 1; else if (n==1) return 1; else if(k%2==0) return 2*F(n+1)*F(n)-F(n*n); else return F(n+1)*F(n)+2*F(n*n)+powf(-1,n); } } void main () { int n,k; setlocale(LC_ALL,"russian"); printf("Введите число N "); scanf("%d",&n); if (n<0) { printf("Число должно быть не меньше 0!"); getchar(); exit (1); } long int f; f = F(n); printf("Число Фибоначчи с номером %d = %d ",n,f); getchar(); getch(); }
Решение задачи: «Написать рекурсивную функцию вычисления чисел Фибоначчи»
textual
Листинг программы
long int fibo (int n) { long int f0=0,f1=1,f2=1; for (int i=0; i<n; i++) { f2=f1+f0; f0=f1; f1=f2; } return f2; }
Объяснение кода листинга программы
- Передаем в функцию fibo целое число n.
- Инициализируем первые три числа последовательности Фибоначчи: f0=0, f1=1, f2=1.
- С помощью цикла for вычисляем n-1 членов последовательности Фибоначчи.
- На каждой итерации цикла меняем значения f0, f1, f2.
- При каждой итерации f2 становится результатом суммы f1 и f0, f0 присваивается значение f1, а f1 присваивается значение f2.
- После завершения цикла возвращаем последнее вычисленное значение f2.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д