Страницы

Поиск по вопросам

пятница, 20 декабря 2019 г.

Написать функцию, которая выводит на экран ряд чисел Фибоначчи до n. C++

#cpp #алгоритм


Нужно написать рекурсивную функцию которая выводит числа Фибоначчи до n. n в функцию
передаю в качестве аргумента, должна быть только рекурсия без доп циклов и доп переменных.
 Как находить Фибоначчи рекурсивно я знаю. 

int fib(int n)
{
 if(n < 3)
     return 1;
 return fib(n - 2) + fib(n - 1);
}


Вот я как бы отталкиваюсь от этого кода. Уже и cout в разные места пытался подставить
и методом тыка изменял разные значения... не получается(( Помогите пожалуйста. Спасибо!!!  
    


Ответы

Ответ 1



(Вариант без (дополнительной функции/переменных) / параметров по умолчанию / циклов) Напишем функцию fib так, что если в неё передаётся положительное число n, то она выводит первые n чисел Фибоначчи и возвращает n-ое число Фибоначчи, а если передаётся отрицательное число n, то возвращает -n-ое число Фибоначчи (без вывода): int fib(int n) { if (n > 0) { // выводим числа Фибоначчи от 1 до n-1 fib(n - 1); // выводим n-ое число Фибоначчи cout << (n <= 2 ? 1 : fib(-(n - 1)) + fib(-(n - 2))) << endl; } else { n *= -1; } return n <= 2 ? 1 : fib(-(n - 1)) + fib(-(n - 2)); } Ideone

Ответ 2



Задача легко решается, если использовать дополнительную функцию. Хотя на самом деле можно и без нее (если использовать параметры по умолчанию) #include void fib1(int a, int b, int limit) { if (limit == 0) { return; } std::cout << a << std::endl; fib1(b,a+b, limit-1); } void fib(int n) { fib1(1,1,n); } int main() { fib(10); return 0; } данные решение очень "интуитивно", если почитать книги по лиспу:)

Ответ 3



#include int fib(int n, bool print=true) { if(n == 2 || n == 1) { if(print) printf("%d\n",1); return 1; } else if(n < 1) return 0; else { int res = fib(n - 2, false) + fib(n - 1, true); if(print) printf("%d\n", res); return res; } } int main() { int N=20; fib(N); } Если я правильно понял, что Вам надо вывести все числа Фиббоначи до n БЕЗ циклов.

Комментариев нет:

Отправить комментарий