Написать рекурсивную функцию вычисления чисел Фибоначчи - 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.