RECURSİVE OLARAK FAKTORİYEL HESABI YAPMA

Yayınlandı: Haziran 22, 2010 / Algoritmalar, C/C++
Etiketler:, , , , , , , , , ,

#include<stdio.h>
#include<conio.h>
int fac(int);
void main()
{
int num;
printf(“sayiyi giriniz:”);
scanf(“%d”,&num);
printf(“%d”,fac(num));
getch();
}
int fac(int N)
{
if(N<=1)
return 1;
return N*fac(N-1);
}

 

Oracle Exadata SQL Server Goldengate Weblogic EBS ve Linux konusunda aşağıdaki konularda 7×24 Uzman Danışmanlara yada Eğitimlere mi
İhtiyacınız var mehmet.deveci@gridgroup.com.tr adresine mail atarak Bizimle iletişime geçebilirsiniz.

– Oracle Veritabanı Danışmanlığı
– Oracle Veritabanı Bakım ve Destek
– Exadata Danışmanlığı
– Exadata Bakım ve Destek
– SQL Server Veritabanı Danışmanlığı
– SQL Server Veritabanı Bakım ve Destek
– Goldengate Danışmanlığı
– Goldengate Bakım ve Destek
– Linux Danışmanlığı
– Linux Bakım ve Destek
– Oracle EBS Danışmanlığı
– Oracle EBS Bakım ve Destek
– Weblogic Danışmanlığı
– Weblogic Bakım ve Destek
– Oracle Veritabanı Eğitimleri
– Oracle VM Server Danışmanlığı
– Oracle VM Server Bakım ve Destek
– Oracle EPPM Danışmanlığı
– Oracle EPPM Bakım ve Destek
– Oracle Primavera Danışmanlığı
– Oracle Primavera Bakım ve Destek
– Oracle Eğitimleri
– SQL Server Eğitimleri
– Goldengate Eğitimleri
– Exadata Eğitimleri
– Linux Eğitimleri
– Oracle EBS Eğitimleri
– Oracle VM Server Eğitimleri
– Weblogic Eğitimleri
– Oracle EPPM Eğitimleri
– Oracle Primavera Eğitimleri

yorum
  1. Hasan MANZAK dedi ki:

    Faktöriyel hesapları için recursive yaklaşım basit, rahat fakat iteratif yaklaşıma göre yavaş ve sisteme yük getirecek bir kullanım olur. N! hesabı için recursive teknik N adet fonksiyon çağırımı yapacak ve değişkenler N defa stack a itilecektir. Faktöriyel fonksiyonunda 2 değişken olduğunu düşünürsek ( biri fonksiyon parametresi diğeri de geri dönüm değeri ) stack 2*N*SizeOf(kullanılan değişken tipi) -byte kadar şişecektir… İşlem yükü ise sadece fonksiyon içerisindeki çarpma işlemidir. Toparlarsak; sisteme binen işlem yükü: N adet fonksiyon çağırımı, N-1 adet çarpma işlemi; bellek kullanımı: 2*N*SizeOf(kullanılan değişken tipi) -byte.

    İteratif yaklaşım ile çözüme gidilirse, yapılması gereken basit bir for döngüsü kurmaktır.

    result=1;
    for k=1 to N do result=result*k;

    Bu yaklaşımla 1 adet fonksiyon çağırımı yaparak sonuç hesaplatabilirsiniz. Kullandığınız bellek miktarı ise ciddi şekilde azalmış oalcaktır: 3 adet değişken! 1. döngü kontrolü (k), 2. fonksiyon parametresi, döngü sınırı (N), 3. ise sonucun saklandığı result değeri (geri dönüm, farklı dillerde farklı yapılar mevcuttur ;)). ) -byte kadar şişecektir… İşlem yükü ise sadece fonksiyon içerisindeki çarpma işlemidir. Toparlarsak; sisteme binen işlem yükü: 1 adet fonksiyon çağırımı, N adet çarpma işlemi, 1 adet atama ve 1 adet de Inc işlemi (for döngüsü içinde k nın birer artması olayı. Derleyici seviyesinde bu işlem CPU saat darbesi ile gerçekleştirilir ve a=a+1 atamasından kat be kat daha hızlıdır ;)); bellek kullanımı: 3*SizeOf(kullanılan değişken tipi) -byte.

    Genel karşılaştırmayı yaparsak, faktöriyel hesabını iteratif olarak yaptırmak daha kârlıdır…

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s