Fibonacci sayı değerini ekrana yazan rekursif fonksiyonu

exmoo

Centipat
Katılım
29 Nisan 2020
Mesajlar
33
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144 ... Şeklinde verilen sayı sırasındaki fibonacci sayı değerini ekrana yazan rekursif fonksiyonu C++ dili ile yardımcı olursanız sevinirim.
 
Öncelikle recursive ya da özyinelemeli de.
Sonrasında;
Kod:
#include <iostream>

using namespace std;

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

int main() {

    auto term{ 0 };
    auto idx{ 0 };

    cout << "Kacinci sayiya kadar istiyorsun? ";
    cin >> term;
    cout << "Fibonnaci Sayilari : ";

    while (term > idx) {
        cout << " " << fib(idx);
        ++idx;
    }

    cout << endl;

    return 0;
}

Mantık şöyle. Kaçıncı terim olursa olsun kendisinden önceki iki terimin toplamı olduğunu biliyorsun. O şekilde kendisini çağırıyorsun fonksiyonun. Sıfır ya da 1'e denk geldiğinde ise bir değeri var. Bu değeri döndürmelisin. O yüzden o if orada var. Maindeki kısım dışında terimli olarak nasıl yapılabilir bilmiyorum. Çünkü bu sefer indexini de tutman gerekiyor. Recursive olması çok dallanıp budaklanmasını sağlıyor. Özellikle bunu 3'lü olarak yaparsan pek dayanmıyor.
 
Öncelikle recursive ya da özyinelemeli de.
Sonrasında;
Kod:
#include <iostream>

using namespace std;

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

int main() {

 auto term{ 0 };
 auto idx{ 0 };

 cout << "Kacinci sayiya kadar istiyorsun? ";
 cin >> term;
 cout << "Fibonnaci Sayilari : ";

 while (term > idx) {
 cout << " " << fib(idx);
 ++idx;
 }

 cout << endl;

 return 0;
}

Mantık şöyle. Kaçıncı terim olursa olsun kendisinden önceki iki terimin toplamı olduğunu biliyorsun. O şekilde kendisini çağırıyorsun fonksiyonun. Sıfır ya da 1'e denk geldiğinde ise bir değeri var. Bu değeri döndürmelisin. O yüzden o if orada var. Maindeki kısım dışında terimli olarak nasıl yapılabilir bilmiyorum. Çünkü bu sefer indexini de tutman gerekiyor. Recursive olması çok dallanıp budaklanmasını sağlıyor. Özellikle bunu 3'lü olarak yaparsan pek dayanmıyor.

Çok teşekkür ederim fakat Auto term hata alıyorum bu kodda.
 
Çok teşekkür ederim fakat Auto term hata alıyorum bu kodda.
Eski bir sürüm kullanıyorsundur A'sı büyük şekilde yazmıyorsan. Daha rahat yazmak için. Hem ilk değerini vermek zorunda kalıyorsun. Bu sayede hatalardan uzak kalıyorsun. int term = 0; da diyebilirsin.
C++11 ile gelmiş. Buradan görebilirsin.
 
Kodu çalıştırınca senden bir değer isteyecek. 10 dersen 10 tane fibonacci sayısı yazar program. 20 dersen 20 tanesini yazar. Sırasıyla tabii. Bu kadar yani. Pek hakim değil gibisin bu konulara, kodları sağdan soldan bulmak yerine satır satır kod okuyup anlamayı kavra bence bu erken aşamalarda.
 
Öncelikle recursive ya da özyinelemeli de.
Sonrasında;
Kod:
#include <iostream>

using namespace std;

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

int main() {

auto term{ 0 };
auto idx{ 0 };

cout << "Kacinci sayiya kadar istiyorsun? ";
cin >> term;
cout << "Fibonnaci Sayilari : ";

while (term > idx) {
cout << " " << fib(idx);
++idx;
}

cout << endl;

return 0;
}

Mantık şöyle. Kaçıncı terim olursa olsun kendisinden önceki iki terimin toplamı olduğunu biliyorsun. O şekilde kendisini çağırıyorsun fonksiyonun. Sıfır ya da 1'e denk geldiğinde ise bir değeri var. Bu değeri döndürmelisin. O yüzden o if orada var. Maindeki kısım dışında terimli olarak nasıl yapılabilir bilmiyorum. Çünkü bu sefer indexini de tutman gerekiyor. Recursive olması çok dallanıp budaklanmasını sağlıyor. Özellikle bunu 3'lü olarak yaparsan pek dayanmıyor.

Dostum bunu bana C dili halini atabilrsen memnun olurum.
 
Dostum bunu bana C dili halini atabilrsen memnun olurum.
Tabii atayım hemen.

Kod:
#include <stdio.h>


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

int main() {

    int term = 0;
    int idx = 0;

    printf("Kacinci sayiya kadar istiyorsun? ");
    scanf("%d", &term);
    printf("Fibonnaci Sayilari : ");

    while (term > idx) {
        printf(" %d", fib(idx));
        ++idx;
    }
   
    printf("\n");

    return 0;
}
 

Geri
Yukarı