Bu makalemde mantık hatasını doğurabilecek ve kolaylıkla hataya düşebileceğiniz ancak anladığınız zaman size birçok konuda yardımı dokunacak bir konuya fonksiyon yenilenmesi olayına değinmek istiyorum.
Şimdi düşünün ki, yazdığınız bir fonksiyon kendi içinde tekrar kendisini çağırıyor, olamaz bu hata verir yada kendini sonsuz kere döndürü o yüzden hataya düşer yada bilgisayarı kilitler diye düşünebilirsiniz ancak az sonra vereceğim örneğimde göreceksinizki sınırını belirttigimiz zaman uzun uzadıya yazacağınız bir fonksiyonu kolaylıkla yapabiliyorsunuz.
Ben size faktöriyel hesaplamasının örneğini vermek istiyorum.
NOT: Genelde borland ile yazdığım kodları örnek veriyordum bu sefer microsoftun developeri olarak seçilince visual studio'sunu full olarak kullanabilme hakkı bana tanındı bu yüzden kodlarım visual studio ya göredir ,bu seferlik Borlanddaki halinide vericem....
Microsoft Visual Studio için
#include "stdafx.h"
#include <iostream>
using namespace std;
long factorial(long n)
{
if(n>1)
{return n*factorial(n-1);}
else
return 1;
}
int _tmain(int argc, _TCHAR* argv[])
{int n;
long fact;
cout<<"bir sayi giriniz"; cin>>n;
fact = factorial(n);
cout<<"factoriyeli :"<<fact;
getchar();getchar();
return 0;
}
Borland C++ için
#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;
long factorial(long n)
{
if(n>1)
{return n*factorial(n-1);}
else
return 1;
}
int main()
{int n;
long fact;
cout<<"bir sayi giriniz"; cin>>n;
fact = factorial(n);
cout<<"factoriyeli :"<<fact;
getchar();getchar();
return 0;
}
şimdi kodumuzu incelemek gerekirse
if(n>1)
{return n*factorial(n-1);}
else
return 1;
Bu kısım işte fonksiyonu kendi içinde çağırıyor ancak yaptığımız.
{return n*factorial(n-1);}
Bu kısım compileri durduruyor çünkü n sayısını geriye dogru sayıyor.
mesela 3 girdiniz, olay aynen şöyle aksediyor:
{return 3*factorial(2);} => 3*factorial(2)
{return 2*factorial(1);} => 2*factorial(1) => 1 <1 olmadıgı için işlem sonucunu döndürür.
3 * 2 * 1
Buraya kadarki kısımda sorunlar çıktıysa, aklınıza yatmadıysa size şunu önerebilirim:
Yukardaki kodda şöyle bir değişiklik yapın.
if(n>1)
{return n*factorial(n-1);}
else
return 1;
Bu kısmı şöyle değiştirin:
cout<<" i \n";
if(n>1)
{return n*factorial(n-1);}
else
return 1;
Kaç kere baştan bu fonksiyona girerse o kadar i harfi yazacaktir fonksiyonunuz. Amacım size bu kodun kendini yenilerken sürekli çıkıp bu fonksiyona tekrar girdiğini göstermekti.
Umarım faydalı olabilmişimdir kolay gelsin..