IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası

IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası (https://www.ircforumlari.net/)
-   C ve C++ (https://www.ircforumlari.net/c-ve-c/)
-   -   Aynı işleve sahip yinelemeli ve özyinelemeli iki fonksiyon arasındaki performans fark (https://www.ircforumlari.net/c-ve-c/455605-ayni-isleve-sahip-yinelemeli-ve-ozyinelemeli-iki-fonksiyon-arasindaki-performans-fark.html)

aSi 22 Şubat 2012 14:58

Aynı işleve sahip yinelemeli ve özyinelemeli iki fonksiyon arasındaki performans fark
 
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]

Yinelemeli yani diğer adıyla iteratif fonksiyonlar aynı işlemi defalarca tekrarlayarak sonuca ulaşmak için kullanılır. Özyinelemeli fonksiyonda ise aynı işlemi yapmak yerine yazdığımız fonksiyonu tekrardan çağırarak kendi içinde bir döngü oluşturup sonuca ulaşmamızı sağlar. İki fonksiyonun da kullanım alanları benzerdir (faktöriyel hesabı gibi) ve tek farkları aralarındaki çalışma süresi farkıdır. Biz de bu kodda bu aradaki süreyi ölçeceğiz. Özyinelemeli fonksiyonlar hakkında daha fazla bilgiye[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] tıklayarak ulaşabilirsiniz.


Kod:

#include <iostream>//gerekli kütüphanemiz
#include <time.h>//time.h kütüphanemizi gerçek zamanlı ölçüm yapmada kullanacağız.
//Bu kütüphane hakkında daha fazla bilgi almak için burayı tıklayın.
using namespace std;//her satırda std:: kullanmamak için namespace kullandık.

double faktöriyel_özyinelemeli(int x)//ilk olarak özyinelemeli fonksiyonumuzu yazdık.
{
      if (x<=1)
    return 1;//return 1 dememizin sebebi 1 ve 0 ın faktöriyelinin yine 1 olmasıdır.
      else
      return (x*faktöriyel_özyinelemeli(x-1));// girilen sayının 1den büyük olması durumunda
//sayının kendisini az önce yazdığımız fonksiyonu çağırdığımızda çıkan sonuçla yani 1 eksiğiyle
//çarparak faktöriyel işlemini gerçekleştirdik.

}
double faktöriyel_yinelemeli(int x)//yinelemeli fonksiyonumuz
{  int sonuc=1;//öncelikle bir değişken yaratıp 1e eşitledik.
  if (x<=1)
      return 1;
  else
  {
      while (x!=1)//döngüde ise ilk sonuçla girdiğimiz sayıyı sürekli çarparak
      {  sonuc = sonuc*x;//işlemi devam ettirdik.
        x=x-1;//ta ki x 1 olana kadar.
      }
  return sonuc;//en son işe sonucu döndürdük.
  }
}

void main(void)
{
  int x;
      cout<<"Lütfen 0 veya 0'dan büyük bir sayı giriniz\n";
      cin>>x;//x sayımızı kullanıcıdan aldık
  clock_t baslangıc,bitis;//clock_t türünden 2 tane nesne yarattık

  double sonuc1,sonuc2;//2 tane de double türünde değişken atadık.

  baslangıc=clock();//fonksiyon çalışmaya basladığında saati aldık
      cout<<faktöriyel_özyinelemeli(x)<<endl;//fonksiyonumuzu bastırarak calışmasını sağladık
  bitis=clock();//fonksiyonun sonlanış saatini aldık.

  sonuc1=(double)bitis-baslangıc/CLOCKS_PER_SEC;//birinci sonucumuzu bitiş saatinden başlangıç
    //saatini çıkardıktan sonra /CLOCKS_PER_SEC yaparsak kaç saniyede işlemin tamamlandıgını buluruz.
    //aynı zamanda burda değişken tipi değişimini de (double) koduyla sağladık.
      cout<<sonuc1<<endl;//sonucumuzu bastırdık
  baslangıc=clock();
      cout<<faktöriyel_yinelemeli(x)<<endl;//aynı işlemleri yinelemeli fonksiyon için de yaptık.
  bitis=clock();

  sonuc2=(double)bitis-baslangıc/CLOCKS_PER_SEC;
      cout<<sonuc2<<endl;
 
}




Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 02:47.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
Copyright ©2004 - 2025 IRCForumlari.Net Sparhawk