Csharpta Recursive(Özyinelemeli) Fonksiyonlar

Programlama dillerini kolaylaştıran en önemli unsurlardan bir tanesi de döngülerdir. For döngüsü ve while döngüsü en çok kullanılan döngülerdendir. Peki bu döngülerle her türlü problem çözülebilir mi? Cevap belki “evet”. Çünkü ben henüz “hayır” diyebileceğim bir sonuçla karşılaşmadım. Ama bazı durumlar vardır ki başka bir yolla daha kısa kod kullanarak, daha yüksek performans alarak problemler çözülebilir. Bu yazımda ben de bu diğer yollardan biri olan recursive(özyinelemeli) fonksiyonları anlatacağım.

Recursive fonksiyonlar, kendi kendini çağıran fonksiyondur. Bir kontrol ile sınırlandırılmazsa sonsuza kadar kendi içinde çalışır. Çok düşündüm ,daha açıklayıcı şekilde nasıl anlatırım diye ama sanırım recursive fonsiyonlar hakkında söylenecek başka bir şey yok. Örnekleri inceleyerek daha iyi anlayacağınızı düşünüyorum.

Faktöriyel hesabını iki farklı şekilde oluşturdum. For döngüsü ve recursive fonksiyon kullanılarak yazdığım iki kod arasındaki satır sayısı ve işlem sayısı farkını açık şekilde görebilirsiniz. Tabi bu programın büyük bir program olduğu düşünülürse fark daha da büyüyecektir. Ayrıca fibonacci serisinin recursive fonksiyon kullanarak yazıldığı Csharp örneğini de en son kod bloğunda inceleyebilirsiniz.

For Döngüsü İle Faktöriyel Hesabı
[cc lang = ‘csharp’]
using System;
namespace faktoriyel
{
class faktoriyelHesabi
{
public static void Main()
{
int sayi;
sayi=Convert.ToInt16(Console.ReadLine());
Console.WriteLine(faktoriyelHesapla(sayi));
}
public static int faktoriyelHesapla(int sayi)
{
int i, faktoriyel=1;
if (sayi > 1)
{
for (i = sayi; i > 1; i–)
faktoriyel *=i;
return faktoriyel;
}
else
return 0;
}
}
}
[/cc]

Recursive Fonksiyon İle Faktöriyel Hesabı
[cc lang = ‘csharp’]
using System;
namespace faktoriyel
{
class faktoriyelHesabi
{
public static void Main()
{
int sayi;
sayi=Convert.ToInt16(Console.ReadLine());
Console.WriteLine(faktoriyelHesapla(sayi));
}
public static int faktoriyelHesapla(int sayi)
{
if (sayi == 1 || sayi == 0)
return 1;
else
return sayi * faktoriyelHesapla(sayi – 1);
}
}
}

[/cc]
Recursive Fonksiyon İle Fibonacci Serisi
[cc lang = ‘csharp’]
using System;
namespace fibonacci
{
class fibonacciSerisi
{
public static void Main()
{
int sayi;
sayi=Convert.ToInt16(Console.ReadLine());
for(int i=0;i<=sayi;i++) Console.WriteLine(fibonacciHesapla(i)); } public static int fibonacciHesapla(int sayi) { if (sayi == 1 || sayi == 0) return 1; return fibonacciHesapla(sayi-1) + fibonacciHesapla(sayi - 2); } } } [/cc]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir