PDA

View Full Version : این کد کارش چیه؟



mvb_mehran
دوشنبه 15 فروردین 1390, 21:16 عصر
سلام دوستان
این کد کارش چیه ؟
int gcd(int x,int y)
{
if (y==0)
return x;
return gcd(y,(x % y));
}

mvb_mehran
دوشنبه 15 فروردین 1390, 22:43 عصر
کسی کمک نمیکنه؟

sh4mid
دوشنبه 15 فروردین 1390, 22:43 عصر
GCD (http://en.wikipedia.org/wiki/Greatest_common_divisor) یا همون ب.م.م (http://fa.wikipedia.org/wiki/%D8%A8%D8%B2%D8%B1%DA%AF%E2%80%8C%D8%AA%D8%B1%DB%8 C%D9%86_%D9%85%D9%82%D8%B3%D9%88%D9%85_%D8%B9%D9%8 4%DB%8C%D9%87_%D9%85%D8%B4%D8%AA%D8%B1%DA%A9) خودمون رو حساب می کنه


gcd(a,0)=a
(gcd(a,b)=gcd(b,a mod b

glassysmart
سه شنبه 16 فروردین 1390, 00:55 صبح
سلام
این جوری بهتر است:

int gcd(int x,int y)
{
if (y==0)
{

return x;
}

return gcd(y,(x % y));
}

مسعود اقدسی فام
سه شنبه 16 فروردین 1390, 13:42 عصر
سلام دوستان
این کد کارش چیه ؟
int gcd(int x,int y)
{
if (y==0)
return x;
return gcd(y,(x % y));
}

بزرگترین مقسوم علیه مشترک (gcd) دو عدد x و y رو محاسبه می‌کنه. اگه یادتون باشه دوران راهنمایی با همین روش که بهش روش نردبانی می‌‌گفتیم این محاسبه انجام می‌شد.
فرض کنیم x از y بزرگتر باشه. قانون کلی اینه که بزرگترین مقسوم علیه مشترک دو عدد x و y همون بزرگترین مقسوم علیه مشتریک y و باقیمانده تقسیم x بر y هستش. یعنی:


( gcd( x , y ) = gcd( y, x % y


اما اگه x % y صفر باشه، یعنی x بر y بخشپذیره و gcd اونها همون خود y می‌شه. تابع بالا هم همین روش رو به صورت بازگشتی پیاده‌سازه می‌کنه.

برای درک بهتز اون قطعه کد رو به صورت زیر در نظر بگیرید:

int gcd( int x, int y )
{
if( x % y == 0 )
{
return y;
}
return gcd( y, x % y );
}