Fibonacci number calculated without a loop?
Здравейте,
бихте ли дали насоки за решаване на задача 10 от домашното? Без цикъл наистина не успявам да я реша.
мерси предварително
Здравейте,
бихте ли дали насоки за решаване на задача 10 от домашното? Без цикъл наистина не успявам да я реша.
мерси предварително
С рекурсия. Тук е описано по-подробно.
http://stackoverflow.com/questions/7985470/printing-fibonacci-number-series-without-using-loops
Рекурсия
Чрез рекурсия, като отново се използва рекурентната връзка между елементите (всеки елемент е сума от предишните два елемента).
Точно тази рекурсивна зависимост не е особено ефективна, да не кажа никак.
Да, но е най-лесна за имплементиране.
Всяко произведено число може да се кешира, така че да бъде толкова ефективна колкото и цикъл.
Аз съм го решил с добрата стара дърта сметка. Ето ти линк
https://en.wikipedia.org/wiki/Fibonacci_number
Четеш от него
#include <iostream>
#include <cmath>
using namespace std;
int main(){
cout.precision(9);
cout<<fixed;
cout<<"Nth FIBONACCI NUMBER\n"<<endl;
int n;
int fib;
cout<<"Which one Fibonacci's number you want to be calculate for you?: ";
cin>>n;
cout<<endl;
double a = (1+sqrt(5))/2;
double b = (1-sqrt(5))/2;
fib=(pow(a,n)-pow(b,n))/sqrt(5);
cout<<n<<" Fibonacci's number is "<<fib<<endl<<endl;
return 0;
}
Поздрави.
Това решение дава грешни резултати заради загубата на точност при големи числа с плаваща запетая.
Освен това прелива доста бързо заради типа данни (int fib), който ползваш за съхранение на резултата.
Промени го на unsigned long long и ще можеш да съхраняваш числа до (93).
За по-големи ще трябва да се използва друг тип данни.
Това за типа на резултата си прав. Обаче ако го смениш ще трябва и да закръгляш. Няма грешен резултат. Програмата по-скоро би изчерпила битовете за запис на даден тип вместо да даде грешен резултат. Много са ви наплашили с тази неточност. Виж float наистина мирише ама дабъла си е добре.
Моля те първо да свериш резултатите за големи числа, които дава твоя код, с очакваните такива, които трябва върне (има таблици в интернет за Fibonacci до 50 и нагоре, но мисля че и на доста по-ниски стойности имаше големи разлики), преди да твърдиш, че всичко ти е наред в сметките.
EDIT:
За 30 елемент на Фибиначи твоят код връща:
30 Fibonacci's number is 832039
Верният отговор е 832040 - справка.
Нагоре разликите стават още по-големи.
аз също направих с рекурсия
Аз използвах инфо от http://www.learncpp.com/cpp-tutorial/7-11-recursion/. На доста достъпен език е обяснена рекурсията и по точко Fibonacci numbers
Много благодаря за отговорите :)
Това е от линка, който си дал (от http://stackoverflow.com). Според човека, сложил кода там, ако n е 0, ще имаме return 0 ;
ако n e 1 , ще имаме return 1.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
А това взех от Wiki. Оттук виждаме, че за n = 0 или 1, ще имаме return 1.
Та въпроса ми е, нулево число на Фибоначи, съществува ли?
Нулевия и първия индекс са 1, преди тях няма нищо.