C++ Fonksiyon Yenilenmesi

Bu Dersimizde C++ 'ta fonksiyon yenilenmesi olayına değinmek istiyorum..

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..
  • Etiketler;
Emre Çamalan
1986 doğumlu olan Emre Çamalan, Atılım Üniversitesi Bilgisayar Mühendisligi 2. sınıfta burslu olarak eğitimini sürdürüyor. Programlama merakı ve tecrübesi okuldan öncelere dayananan yazar, Ankara'da yaşıyor.
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

Hocam bu C'deki recursive fonksiyon mantığıyla aynı değil mi ?

Yukarı Git