Fibonacci Sayıları ...

Burak Gündüz
12-03-2011, 18:01   |  #1  
OP Üye
Teşekkür Sayısı: 0
83 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Fibonacci (kendisinden önce gelen iki sayının toplamı) sayılarını hesaplayan bir program yazdım. Fakat büyük sayının girilmesinde sonuç göstermiyor. (50 ve üzeri gibi - bazen 50'yi gösteriyor ama ekrana basması uzun sürüyor) Bunun nedeni karakter sayısının veri tipine(int) yetersiz kalmasından dolayı olduğundan değil mi?

Daha büyük sayıların gösterilmesi için nasıl bir tanımlama yapmalıyım?
Cevaplarınızı bekliyorum..

[ Tüm kodu seç ] [ Yeni Pencerede Göster ]
#include<stdio.h> #include<conio.h>  int fibonacci (int);  int main() {      int a;           printf("Fibonacci sayilari: 1,1,2,3,5,8... \nKendisinden once gelen iki sayinin toplamidir.");      printf("\n\nFibonacci degerinin alinmasini istediginiz sayiyi girin: ");      scanf("%d",&a);      printf("\n\t%d fibonacci degeri: %d",a,fibonacci(a));   getch(); return 0; }      int fibonacci(int sayi) {          if(sayi==0 || sayi==1)            return sayi;          else            return fibonacci(sayi-1)+fibonacci(sayi-2); }

muh34
13-03-2011, 00:46   |  #2  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Bilgisayarların en önemli özelliklerinden bir tanesi yogun işlem yapma kapasitesinin olmasıdır.Bizler programlarımızda 'hız' kavramından en iyi şekilde yararlanmaya calısırız.Ancak bilgisayarlar da belirli kısıtlar altında çalışmaktadır.Programınız fibonacci sayılarının belirtilen deger dogrultusunda toplamını,recursive bir yaklasımla hesaplamaktadır.50 ve üzeri sayısal degerlerinde programın cok uzun surmesi doğaldır.Çünkü,her return degerinde kendi kendini çağıran makina,sistem yıgınını kullanarak bellekte yerleştirdiği her adresi yeniden çağırır.Dolayısıyla bu işlem nekadar cok olursa,program hızı o derece düşecektir.Çünkü her return donus noktasında,daha onceden bellekte yerleştirdiği adresleri yeniden çağırarak hesaplamaya erişmek bir makina için aslında cok kolay degildir.Bu duruma,0'dan 100000000... e kadar donen bir dongu kurdugunuzda da rastlayabilirsiniz.
Aslında bunun optimal bir çözümü de yoktur.Örneğin pi sayısını göz önüne alacak olursak,günümüzde bu sayının hala n.basamakları araştırılmaktadır ki,bu işlemi bilgisayarlar yapabilseydi matematikçiler aç kalabilirdi.

Başarılar

Burak Gündüz
13-03-2011, 21:33   |  #3  
OP Üye
Teşekkür Sayısı: 0
83 mesaj
Kayıt Tarihi:Kayıt: Eki 2010
Alıntı: muh34  
Bilgisayarların en önemli özelliklerinden bir tanesi yogun işlem yapma kapasitesinin olmasıdır.Bizler programlarımızda 'hız' kavramından en iyi şekilde yararlanmaya calısırız.Ancak bilgisayarlar da belirli kısıtlar altında çalışmaktadır.Programınız fibonacci sayılarının belirtilen deger dogrultusunda toplamını,recursive bir yaklasımla hesaplamaktadır.50 ve üzeri sayısal degerlerinde programın cok uzun surmesi doğaldır.Çünkü,her return degerinde kendi kendini çağıran makina,sistem yıgınını kullanarak bellekte yerleştirdiği her adresi yeniden çağırır.Dolayısıyla bu işlem nekadar cok olursa,program hızı o derece düşecektir.Çünkü her return donus noktasında,daha onceden bellekte yerleştirdiği adresleri yeniden çağırarak hesaplamaya erişmek bir makina için aslında cok kolay degildir.Bu duruma,0'dan 100000000... e kadar donen bir dongu kurdugunuzda da rastlayabilirsiniz.
Aslında bunun optimal bir çözümü de yoktur.Örneğin pi sayısını göz önüne alacak olursak,günümüzde bu sayının hala n.basamakları araştırılmaktadır ki,bu işlemi bilgisayarlar yapabilseydi matematikçiler aç kalabilirdi.

Başarı

Anladım açıklamanız için teşekkür ederim,sağolun :)