Bu dersimizde recursive yani kendini çağıran fonksiyonlarla ilgili başka bir örnekten bahsedeceğiz.
Matematikteki fibonacci serisi denilen yapıyı hem normal yolla hem de recursive olarak yapmaya çalışacağız.
Bu örnekte de tailrec anahtar kelimesini kullanacağız. Ama tailrec her recursive yapı için kullanılmaz. Uygulama mantığımızı buna göre düzenlememiz gerekiyor.
Bu derste yazılan kodlar aşağıdaki gibidir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
import java.math.BigInteger fun main(args : Array<String>){ // println("Normal yolla : "+fibonacciNormal(1000)) //println("Recursive :" + fibonacciRecursive(35)) println(fibonacciTailRecursive(10, BigInteger.ONE, BigInteger.ZERO )) } // 1 1 2 3 5 8 13 21 34 55.. fun fibonacciNormal(n:Int ):BigInteger{ var sayi1= BigInteger.ZERO var sayi2= BigInteger.ONE var sonuc=BigInteger.ZERO for(i in 2..n){ sonuc= sayi1 + sayi2 sayi1 = sayi2 sayi2 = sonuc } return sonuc } fun fibonacciRecursive(n:Int):BigInteger{ if(n<=1) return BigInteger.ONE else return fibonacciRecursive(n-1) + fibonacciRecursive(n-2) } tailrec fun fibonacciTailRecursive(bulunacakSayi:Int, a:BigInteger, b:BigInteger):BigInteger{ return if(bulunacakSayi==0) b else fibonacciTailRecursive(bulunacakSayi - 1, a+b, a) } |