PDA

View Full Version : مبتدی: تابع بازگشتی فاکتوریل + 1



smemamian
شنبه 18 آذر 1391, 19:04 عصر
سلام دوستان

این تابع چگونه کار می کنه ؟

میشه مرحله به مرحله توضیح بدین ؟

مثلاً 4 چگونه 41 میشه !



#include <cstdlib>
#include <iostream>

using namespace std;
int result(int n);
int main(int argc, char *argv[])
{
int n, res =0 ;
cout << "Plz enter number:" << endl ;
cin >> n ;
res = result(n) ;
cout << res ;
system("PAUSE");
return EXIT_SUCCESS;
}


int result(int n)
{
int f=0;
if ((n==0)||(n==1))
return 1;
else
f=n*result(n-1) +1;
return f;

}

MrasoolF
شنبه 18 آذر 1391, 19:32 عصر
سلام. کار این تابع مثل این میمونه که یکی به شما بگه 20 فاکتوریل چند میشه بعد شما بگی 19 فاکتوریل و به من بگو، من ضربدر 20 میکنم میشه بیست فاکتوریل! خوب حالا برا بدست آوردن 19 فاکتوریل باید 18 فاکتوریل رو بدست اورد وبعد هم... یعنی تابع هی خودشو صدا میزنه. خوب تا به جایی میرسیم که به یک فاکتوریل میرسیم و جواب اونو داریم! حالا برمیگردیم و به ترتیب یکی یکی حساب میکنیم تا برسیم به بیست فاکتوریل. توابع ریکرسین(بازگشتی) کلاً مقدار زیادی از حافظه رو اشغال میکنن و توصیه نمیشه از اونا استفاده کنید.

smemamian
شنبه 18 آذر 1391, 20:04 عصر
درسته

می خواهم مرحله به مرحله بگین ! مثلاً :

n = 4 ....

fati63
شنبه 18 آذر 1391, 22:31 عصر
درسته

می خواهم مرحله به مرحله بگین ! مثلاً :

n = 4 ....
دوست عزیز برای n=4 به این صورت میشه:f=n*result(n-1) +1
f=4*result(3)+1
f=4*3*result(2)+1+1
f=4*3*2*result(1)+1+1+1
f=4*3*2*1+1+1+1
f=27[/CPP]

smemamian
شنبه 18 آذر 1391, 22:43 عصر
جواب 41 میشه نه 27 !

omidshaman
شنبه 18 آذر 1391, 22:48 عصر
این جوری که من نوشتم درکش سادست دقیقا توابع بازگشتی مثل همین پرانتزای تو در تو کار می کنن

f= 4*(3*(2*(1)+1)+1)+1
که جواب این میشه 41
حالا اگر 10 هم بزاری باز به همین شکل فقط تعداد پرانتزا بیشتر میشه