Loading...
+ Нов въпрос
joanapenova avatar joanapenova 1 Точки

Много благодаря за отговорите :)

0
tapunger avatar tapunger 2 Точки
if(n==0)
    {
        return 0;
    }
    else if(n==1)
    {
        return 1;
    }

Това е от линка, който си дал (от http://stackoverflow.com). Според човека, сложил кода там, ако n е 0, ще имаме return 0 ;

ако n e 1 , ще имаме return 1.

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  • F(0) = 1   (n)
  • F(1) = 1   (n)
  • F(n) = F(n-1) + F(n-2)

А това взех от Wiki.  Оттук виждаме, че за n = 0 или 1,  ще имаме return 1. 

Та въпроса ми е, нулево число на Фибоначи, съществува ли?

0
krasi1105 avatar krasi1105 380 Точки

Нулевия и първия индекс са 1, преди тях няма нищо.

0
IvanMitkov avatar IvanMitkov 20 Точки

Рекурсия

0
ThePSXHive avatar ThePSXHive 436 Точки

Чрез рекурсия, като отново се използва рекурентната връзка между елементите (всеки елемент е сума от предишните два елемента).

0
IvanMitkov avatar IvanMitkov 20 Точки

Точно тази рекурсивна зависимост не е особено ефективна, да не кажа никак.

0
ThePSXHive avatar ThePSXHive 436 Точки

Да, но е най-лесна за имплементиране.

0
RoYaL avatar RoYaL Trainer 6848 Точки

Всяко произведено число може да се кешира, така че да бъде толкова ефективна колкото и цикъл.

0
EduardEdi avatar EduardEdi 2 Точки

Аз съм го решил с добрата стара дърта сметка. Ето ти линк

https://en.wikipedia.org/wiki/Fibonacci_number

Четеш от него 

Relation to the golden ratio[edit]

Closed-form expression и тук всичко е описано. Все пак ако не се справиш можеш да разгледаш моя код:

 

#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;
}

 

Поздрави.

0
MartinBG avatar MartinBG 4625 Точки

Това решение дава грешни резултати заради загубата на точност при големи числа с плаваща запетая.

Освен това прелива доста бързо заради типа данни (int fib), който ползваш за съхранение на резултата.

Промени го на unsigned long long и ще можеш да съхраняваш числа до (93).

За по-големи ще трябва да се използва друг тип данни.

0
06/03/2017 10:03:32
EduardEdi avatar EduardEdi 2 Точки

Това за типа на резултата си прав. Обаче ако го смениш ще трябва и да закръгляш. Няма грешен резултат. Програмата по-скоро би изчерпила битовете за запис на даден тип вместо да даде грешен резултат. Много са ви наплашили с тази неточност. Виж float наистина мирише ама дабъла си е добре.

1
MartinBG avatar MartinBG 4625 Точки

Моля те първо да свериш резултатите за големи числа, които дава твоя код, с очакваните такива, които трябва върне (има таблици в интернет за Fibonacci до 50 и нагоре, но мисля че и на доста по-ниски стойности имаше големи разлики), преди да твърдиш, че всичко ти е наред в сметките.

EDIT:

За 30 елемент на Фибиначи твоят код връща:

30 Fibonacci's number is 832039
 

Верният отговор е 832040 - справка.

Нагоре разликите стават още по-големи.

 

 

 

0
06/03/2017 10:08:04
mases avatar mases 2 Точки

аз също направих с рекурсия

0
Aguzelov avatar Aguzelov 78 Точки

Аз използвах инфо от http://www.learncpp.com/cpp-tutorial/7-11-recursion/.  На доста достъпен език е обяснена рекурсията и по точко Fibonacci numbers

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.