#include <stdio.h>
int tablo(int x); // fonksiyon prototipi - ayrıca python gibi direk referans yazamazsınız ne döndürdüğü belirtilmeli (int, char, float,double ... vs //
int main()
{
int x = 1;
tablo(x);
return 0; // Çoğu IDE'de bunu belirtmenize gerek yok ama console sırasında hata çıkarmaması için tavsiye edilir //
}
int tablo(int x) // void fonksiyon bir şey döndürmeyeceği için çalışmayacaktır onun yerine int gibi sayı tabanlı bir döndürme tipi belirtilmeli //
{
int i;
if(x<11)
{
for(i=1;i<11;i++)
{
printf("%-3d ",x*i);
}
puts("\n"); // Printf'in granülsüzü //
return tablo(x+1);
}
return 1;
}
Geç döndüğüm için özür dilerim.Programlamayi bir kenara birak, matematik olarak bak meseleye.
Eki Görüntüle 904306
Ustteki fonksiyonu tanimlayan fonksiyonu en rahat recursive yazarsin. Matematikte de programlamada da bazi fonksiyonlar tanimlari geregi kendi kendilerini cagirmak durumundadirlar.
Ornegin bilgisayardaki dosya sistemi. ( Tree traversal )
Ayrica recursive konseptine giris genelde fibonacci ile yapilir, ustte verdigim fonksiyon ona ait.
Fibonacci serisini recursive kullanarak ve kullanmayarak yazdiran 2 farkli fonksiyon yazarsan neden recursive kullanilmasi gerektigini anlamis olursun. Sonraki asama da memoization teknigi.
Memoization - Wikipedia
en.wikipedia.org
Gayet açık hocam, teşekkür ederim. Ek olarak fonksiyonu en başta belirtmekte de hep problem yaşıyordum (Dizi ve matrisleri herhangi bir fonksiyona yollarken hala karıştırıyorum.) onu da ayrıca belirttiğiniz için teşekkür ederim.Geç döndüğüm için özür dilerim. Şu şekilde executable haline getirdim.
C:#include <stdio.h> int tablo(int x); // fonksiyon prototipi - ayrıca python gibi direk referans yazamazsınız ne döndürdüğü belirtilmeli (int, char, float,double ... vs // int main() { int x = 1; tablo(x); return 0; // Çoğu IDE'de bunu belirtmenize gerek yok ama console sırasında hata çıkarmaması için tavsiye edilir // } int tablo(int x) // void fonksiyon bir şey döndürmeyeceği için çalışmayacaktır onun yerine int gibi sayı tabanlı bir döndürme tipi belirtilmeli // { int i; if(x<11) { for(i=1;i<11;i++) { printf("%-3d ",x*i); } puts("\n"); // Printf'in granülsüzü // return tablo(x+1); } return 1; }
Anlamadığınız kısım olursa tekrar yazabilirsiniz. Yorum satırlarında belirtmeye çalıştım.
Çıktısı:
Eki Görüntüle 904503
#include <stdio.h>
void fibonacci(long int a);
int main()
{
fibonacci(20);
return 0;
}
void fibonacci(long int a)
{
long int before;
long int after;
long int aft; // temp //
long int counter = 0;
before = 0;
after = 1;
aft = after;
while(counter<a)
{
printf("\n%ld)%ld" ,counter+1, before);
after = before + after;
before = aft;
aft = after;
counter++;
}
printf("\n");
}
Koda bakmadım, olduğum seviyeki bilgiler ile çözülebilir mi? (sanırım az çok hangi seviyede olduğumu tahmin ediyorsunuzdur. ) çözülebiliyorsa kendim çözmek isterim.Bu da recursive olmayan kullanım şekli.
C:#include <stdio.h> void fibonacci(long int a); int main() { fibonacci(20); return 0; } void fibonacci(long int a) { long int before; long int after; long int aft; // temp // long int counter = 0; before = 0; after = 1; aft = after; while(counter <= a) { printf("\n%ld)%ld" ,counter+1, before); after = before + after; before = aft; aft = after; counter++; } printf("\n"); }
O halde tekrar uğraşacağım, sanırım ilk programlama deneyimim olduğu için basit problemleri daha karmaşık hale getiriyorum hocam. Tekrardan teşekkür ediyorum ilginiz ve yardımınız için.C'ye ilk başladığımda yazdığım fonksiyonlardan biriydi. "long int" yerine sadece "int" yazılabilir. Onun dışında biraz araştırma ve de birazda sabır sayesinde çözülemeyecek bir şey değil. Mantığı gayet basit zaten.
Bu sitenin çalışmasını sağlamak için gerekli çerezleri ve deneyiminizi iyileştirmek için isteğe bağlı çerezleri kullanıyoruz.