Liczby fibonacciego (rekurencyjnie)

0

Witam. Mam napisac program w którym mam skorzystac ze wzorów na liczby Fibonacciego, w których odwołania
rekurencyjne są do liczby Fibonacciego o indeksach o około połowę mniejszych.

Czy dobrze to zapisałem? dla parzystych i nieparzystych. Wywala mi program po wpisaniu zakresu. Wypisuje tylko jedynkę.

    if(n%2 == 0) return ((2*(fib(n-1))+fib(n))*fib(n));
    if(n%2 == 1) return (fib(n-1)*fib(n-1)+fib(n)*fib(n));
#include <iostream>
#include <math.h>
using namespace std;


double fib(int n) {
    if(n == 0) return 0;
    if(n == 1) return 1;
    if(n%2 == 0) return ((2*(fib(n-1))+fib(n))*fib(n));
    if(n%2 == 1) return (fib(n-1)*fib(n-1)+fib(n)*fib(n));
}

int main() {

    cout<<"Podaj zakres: ";
    unsigned int zakres;
    cin>>zakres;


    for(unsigned int i=1; i<zakres; i++){
        cout << fib(i) << endl;
    }
    cout << fib(zakres);

    return 0;
}

0

Poprawny kod na ciąg fibonacciego:

#include <iostream>
#include <string>

int fib(int n){
if(n==0)
    return 0;
else if(n==1) 
    return 1;
else 
    return fib(n-1)+fib(n-2);
}


int main()
{
  std::cout << "Hello, " << fib(9) << "!\n";
}

Nie rozumiem za bardzo co ma Twój program robić jak wyjaśnisz (najlepiej podasz przykładowe wywołanie i jego wynik) to postaram się lepiej pomóc.

1

Na pewno jest źle - tworzysz nieskończoną rekursję wołając fib(n) wewnątrz fib(n).

0

Coś pomieszałeś we wzorach - spójrz tu: https://www.nayuki.io/page/fast-fibonacci-algorithms

2

Zapewne chciałeś zaimplentować coś takiego:

#include <iostream>
#include <cstdint>

using namespace std;

uint64_t
fib(uint64_t n)
{
	uint64_t fk, fk1;

	if (n == 0)
		return 0;
	if (n == 1)
		return 1;
	if (n == 2)
		return 1;

	fk = fib(n / 2);
	fk1 = fib(n / 2 + 1);

	if (n % 2 == 0)
		return (fk * (2 * fk1 - fk));

	return (fk1 * fk1 + fk * fk);
}

int main() {

	cout << "Podaj zakres: ";
	uint64_t zakres;

	cin >> zakres;

	for (uint64_t i = 1; i <= zakres; i++)
		cout << fib(i) << endl;

	return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1