Ввести число и определить, является ли оно числом Фибоначчи - C (СИ)
Формулировка задачи:
Доброго времени суток всем!
Необходима помощь в решении задачи:
Последовательность ряда Фибоначчи определяется следующим образом:
F0=0, F1 = 1, Fn=Fn-2+Fn-1.
N=2,3,4… Ввести число и определить, является ли оно числом Фибоначчи. Решение оформить с помощью рекурсивной функции.
Решение задачи: «Ввести число и определить, является ли оно числом Фибоначчи»
textual
Листинг программы
#include <stdio.h>
char IsFibon_recursive(unsigned prev, unsigned cur, unsigned x) {
if (x > prev)
return IsFibon_recursive(cur, prev + cur, x);
return x == prev;
}
char IsFibon(unsigned x) { return IsFibon_recursive(0, 1, x); }
int main() {
unsigned n;
scanf("%u", &n);
printf("%d", IsFibon(n));
}
Объяснение кода листинга программы
- Включаем заголовочный файл stdio.h для использования функций ввода-вывода
- Создаём две функции: IsFibon_recursive и IsFibon
- Функция IsFibon_recursive принимает три параметра: предыдущее число, текущее число и проверяемое число
- Если проверяемое число больше предыдущего, то функция вызывает саму себя, передавая текущее число как предыдущее, а предыдущее как сумму текущего и предыдущего чисел
- Если проверяемое число равно предыдущему, то функция возвращает 1
- Если проверяемое число меньше предыдущего, то функция вызывает функцию рекурсивно, передавая текущее число как предыдущее, а предыдущее как сумму текущего и предыдущего чисел
- Функция IsFibon является оберткой для функции IsFibon_recursive и принимает одно число
- В функции main считываем число с помощью функции scanf и выводим результат проверки числа с помощью функции IsFibon на экран