Tam Sürümünü Görmek İçin : fibonacci
slmlar java 'ya yeni başladım.
Yapmam gereken bir iş var çok uğraştım ancak iyice birbirine karıştı.
Java'da verilen bir n sayısına kadar fibonacci serisini( 0 ve 1 ile başlayıp her sayının önceki 2 sayının tıoplamından oluştuğu seri---0,1,1,2,3,5,8,13,21...---) ekrana basmam gerekiyor.
Ama bir türlü döngü içinde bunu yapamadım.
Nasıl yapılabileceğine dair bir yol gösterirseniz sevinirim.
Şimdiden teşekkürler...
rekursif(kendini cagiran) bir fonksiyon kullanmaniz gerekiyor. dusunun. :)
Suna benzer bir mantik kullanmalisin:
n = limit_sayi;
n0 = 0;
n1 = 0;
n2 = 1;
while n2 < n {
no = n1;
n1 = n2;
n2 = no + n1;
}
donguye girmeden once bir kere n1 ve n2 degerini yazdirdiktan sonra dongu icinde hep n2 degerini yazdiracaksin.
acemi: 1'den baslamiyor. (1 1 2) :)
fibonacci sayilari, rekursif fonksiyonlari anlatmak icin kullanilan ilk orneklerden biridir. nasil oluyor da herhangi bir kaynakta bu cok kullanilan ornege rastlamadiniz o_mlk?
Öncelikle cevaplar için sağolun
daha öncede dediğim gibi java'ya yeni başladım.
Ben mimarım yüksek lisans dersinde java görüyoruz. İlk defa bir programlama dili kullanıyorum
Bu örneği görebileceğim herhangi bir kaynak bilmiyorum maalesef :3:
rekursif fonksiyonun ne olduğunuda bilmiyorum. ama aceminin yazdığını bir deniycem Ben aynı atama işleminde birde n2 ye birşeyler atamaya çalıyordum.Sanırım sornn orda.
teşekkürler.
uzulmenize gerek yok, rekursif fonksiyonlari bilmiyor olabilirsiniz. bence java dersinde size anlatilanlarla yetinmeyin. javayi sadece gecilmesi gereken bir ders olarak gormuyorsaniz tabii.
rekursif fonksiyon kavramini, fonksiyonlarin ne oldugunu bildiginizi varsayarak aciklayayim:
rekursif fonksiyon, adindan da anlasilabilecegi gibi yinelemeli, belli bir sinira kadar tekrar tekrar kendini cagiran fonksiyon turudur. aslinda fonksiyonun bildiriminde(deklarasyon) rekursif oldugunu belirten bir aciklama yoktur, bunu fonksiyon icindeki cagrim ifadesinden anlarsiniz. ornegin:
void rekursif(int)
{
rekursif(n);
}
givi. aslinda acemi'nin verdigi ornekteki gibi fibonacci serisi basit bir donguyle(while, for) olusturulabilir ama fibonacci serisi dogasi itibariyle rekursif fonksiyon kullanimini da tesvik eder.
kaldi ki kullanicinin bir veri girmesini istiyorsaniz(ornegin limit sayiyi kullanici girecekse) ve program sadece main() fonksiyonundan(ya da program calistirildiginda ilk cagrilan fonksiyon) olusmuyorsa genellikle fonksiyon icindeki dongu degil, fibonacci icin fonksiyonun kendisi kullanilir. ama ne yaparsiniz, insanlar genellikle acemi gibi kolaya kacmayi tercih ediyor. ;) (saka)
acemi: 1'den baslamiyor. (1 1 2)
donguye girmeden once bir kere n1 ve n2 degerini yazdirdiktan sonra...
...
bugunlerde kafami bir turlu toplayamadigim icin onceki mesajlarimda yine bir hata yapmisim.
acemi'yi beni uyarmadigi ve verdigim yanlis bilgiyi duzeltmedigi icin kiniyorum! soyle ki:
fibonacci serisi icin dogal bir yinelemeli(rekursif) fonksiyon yazilamiyor. yani fonksiyonu
kendi icinden cagirabilseniz bile bir fonksiyon dongusune sokamiyorsunuz.
dun rekursif fonksiyon kullanilabilecek olan matematiksel islemleri dusunurken dank etti:
rekursif fonksiyon kullanimi fibonecci serisiyle degil, faktoryel hesabiyla orneklendiriliyor!
daha once kafanizi karistirdiysam beni bagislayin o_mlk.
zihnime sifa istiyorum! gereksiz bir ekleme olacak belki ama acemi'nin yazdigi dongu kodu
mantikli olmakla birlikte su sekilde kisaltilabilir:
while (n1 + n2 < n)
sistem.out.println (n2 = (n0 = n1) + (n1 = n2));
son olarak konsoldan programa limit sayi parametresi vererek fibonacci serisi olusturmayi C++ kodu ile ufak bir fonksiyon kullanarak gosterelim, umarim java'ya uyarlayabilirsiniz:
#include <iostream>
using namespace std;
void r_fib (int l);
int main (int argc, char *argv[])
{
cout << 0;
r_fib (atoi (argv[1]));
exit (EXIT_SUCCESS);
}
void r_fib (int l)
{
static int a = 1, b, c;
cout << (c = (b = a) + (a = c));
if (a + c < l) r_fib (l);
}
kolay gelsin.
lazkopat
08/04/2004, 15:46
int fibonacci(int n){
if(n==0||n==1){
return n;
else return fibonacci(n-1)+fibonacci(n-2);
}
arkadaşım burada n kaçıncı sayı olduğudur.
kolay gele...
lazkopat
08/04/2004, 15:47
yukarıda recursion kullanılmış kodu incelersen biraz daha iyi anlarsın.oke. bye
lazkopat
08/04/2004, 16:11
arkım nası dogru deil. ben sadece methodu yazdım. main class ını sen doldur.oke.bye
calistirip denediniz mi? yani sizde calisti mi? :)
lazkopat
09/04/2004, 12:12
abi çalıştırdım valla. oldu. ben sana yazdığım kodu göndriyom.oke.
-------------------------------------------------------------------
import java.awt.*;
import javax.swing.*;
public class fib{
public static void main(String args[]){
String n;
int m;
n=JOptionPane.showInputDialog("sayıyı gir");
m=Integer.parseInt(n);
String output="";
for(int i=0;i<m;i++){
output+="\n"+fibonacci(i+1);
}
JOptionPane.showMessageDialog(null,""+output);
System.exit(0);
}
public static int fibonacci(int n){
if(n==0||n==1)
return n;
else
return fibonacci(n-1)+fibonacci(n-2);
}
}
dogru. tesekkur ederim. :)
lazkopat
09/04/2004, 12:32
önemli deil epic bilgiler paylaşıldıkça verimli olur.....bye
lazkopat
09/04/2004, 12:45
oke
Forum Yazılımı : vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.