Java recursive functions(Yinelemeli Fonksiyonlar)
Sıradaki konumuz yinelemeli fonksiyonlar yani ingilizce deyimiyle recursive functions. Yinelemeli fonksiyonlar içerisinde kendisini çağıran fonksiyonlar demektir. Peki ne demek kendi içerisinde tekrar kendini çağırmak. Hemen bir örnekle açıklayalım. Yinelemeli fonksiyon denildiğinde her programlama dilinde temel birkaç örnek vardır. O da faktoriyel hesaplayan program ve fibonacci sayılarının hesaplayan program. Özellikle vize yada final sınavlarında da sık sorulan sorulardandır.
Dışarıdan girilen sayının faktoriyelini Hesaplayan Program:
import java.util.Scanner; // class faktoriyel{ // Özyinelemeli(Recursive) Fonksiyonumuz static int faktoriyel(int fak) { if (fak==0) { return 1; } else{ return fak*faktoriyel(fak-1); // burada faktoriyel fonksiyonumuz return le kendini tekrar çağırıyor. } } // main(ana) fonksiyonumuz public static void main(String[] args) { Scanner oku = new Scanner(System.in); System.out.println("Bir sayı giriniz"); int fak=oku.nextInt(); int sonuc=faktoriyel(fak); System.out.println("Faktoriyel sonucu = "+sonuc); } }
Dediğim gibi bu fonksiyonlara en iyi örneklerden birisi fibonacci dizisi hesaplayan programdır. Hemen kodlarını yazalım.
Fibonacci Dizisi Hesaplayan Program
Fibonacci dizisi kendinden 0 dan başlayarak kendinden bir önceki sayıyı toplayarak giden bir dizidir. Örnek olarak:
0+1=1 , 1+2=3 , 3+2=5 , 5+3=8 , 8+5=13 , …. diye gider.
import java.util.Scanner; class fibonacci{ //Recursive(<strong>Özyinelemeli</strong> )Fonksiyonumuz static int fibo(int n) { if (n <= 1) { return n; } else { return fibo(n-1) + fibo(n-2); // return ile recursive ediyoruz. } } // main(ana) fonksiyonumuz public static void main(String[] args) { Scanner oku = new Scanner(System.in); System.out.println("Fibonacci uzunlugu giriniz"); int fib=oku.nextInt(); int sonuc=fibo(fib); System.out.println("Fibonacci sonucu = "+sonuc); } }
Evet arkadaşlar. Elimden geldiğince recursive fonksiyonları anlatmaya çalıştım. Bir sonraki makalemizde görüşmek dileğiyle…
Vize sorumdu ikisi de.Sitenizden bulmuştum.İyiki makale yazmışsınız :)
Ne demek efendim. Faydalı olduysak ne mutlu :)
yuhhh vizede bu kadar basit soruyo olamazlar inanmıyorum yaaa :O
Gerçekten soruyorlar :) Kendi vize sınavımda çıkmış sorulardan birisidir :)
Vizede telefondan bu siteye girerek kopya cektın galiba
niye kendi vize sorusunu hatırlayamaz mı yada vize soruları yayınlandıktan sonra bakmış olamaz mı ?
Recursive ile yarı çapı 3 olan dairenin alanına 3*80 zoom yapılıyor yapılan zoom dan sonra dairenin alanın toplamı kaç olur yardımcı olabilir misiniz?
Çok tuhaf bir durum, tamamen iyi niyetle yazıyorum zira anlamak için çok zaman harcadım.
ya fibonaccinin tanımı yanlış ya da program.
fibonacci 0 ‘dan başlayarak kendinden bir öncekini toplayarak giden bir dizi ise kendinden bir önceki nedir!?(-1) veya (85)
sanırım fibonacci için: öyle bir dizidir ki dizinin ilerleyişi kendinden bir önceki lemanı üzerine toplayıp sıradaki elemanı oluşturarak ilerler dizinin oluşması için ilk iki eleman değeri verilmelidir.
fonksiyona gelelim
Sanırım verdiğimiz değer dizinin o verdiğimiz değerdeki sırada olan elemanı verecek şekilde yazılmaya çalışılmış. o zaman
dizimiz için evrensel tanım olmalı
yani
fibonacci
0 dan başlayıp ikinci elemanı 1 olan ve kendinden bir öncekini toplayarak giden bir dizidir yani
0, 1 , 1+0=1, 1+1=2, 1+2=3, 2+3=5, 3+5=8, 5+8=13, 8+13=21, 13+21=34, 21+34=55, …
şeklinde.
böylelikle dizinin,
1. elemanı 0
2. 1
3. 1
4. 2
5. 3
6. 5
7. 8
8. 13
9. 21
10. 34
11. 55 dır.
böylelikle sizin kısa koda 8 verince 13 çıkmalı
Java’da 1. indis 0 dan başlar yani
0. 0
1. 1
2. 1
3. 2
4. 3
5. 5
6. 8
.
.
gibi…
0-İle 100 Arasındaki Tek Sayıları Recursive Fonksiyon İle Yazdıralım Diye Bir Soru Geldi Bizede