View Full Version : سوال: چه طور میشه که این تابع فاکتوریل اشتباه جواب می ده؟!
bghad1
یک شنبه 16 خرداد 1389, 02:40 صبح
سلام خدمت همه دوستای عزیزم....
یه چیزی برام خیلی عجیبه!!!!!!!
یه متد نوشتم برای محاسبه فاکتوریل..اونوقت اشتباه جواب می ده!!!!!!!!:گیج:
در صورتیکه هرچی trace میکنمشم چیزی دستگیرم نمی شه که چرا اینجوریه!!!!!!!!!!!!:عصبانی:
کد :
public static int Factoriel(int fact)
{
int p = 1;
for (int i = 0; i <= fact; i++)
{
//Console.WriteLine("\n" + i+". " + fact + " " + p);
p *= fact;
fact--;
//Console.Write("\n"+ i+". " +fact + " " + p);
}
return p;
}
bghad1
یک شنبه 16 خرداد 1389, 02:41 صبح
حالا وقتی همین متد رو به این صورت :
public static int Factoriel(int fact)
{
int p = 1;
for (int i = -2; i <= fact; i++)
{
//Console.WriteLine("\n" + i+". " + fact + " " + p);
p *= fact;
fact--;
//Console.Write("\n"+ i+". " +fact + " " + p);
}
return p;
}
یا به این صورت :
public static int Factoriel(int fact)
{
int p = 1;
for (int i = 0; i <= fact+4; i++)
{
//Console.WriteLine("\n" + i+". " + fact + " " + p);
p *= fact;
fact--;
//Console.Write("\n"+ i+". " +fact + " " + p);
}
return p;
}
می نویسم درست میشه تقریباً !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11:متعجب:: صبانی++::گیج:
میلاد قاضی پور
یک شنبه 16 خرداد 1389, 03:09 صبح
خب کدهای شما فکر کنم کاملا اشتباه هستن .
private int factorial (int number)
{
int result;
for (int i=1;i<number;i++)
{
result=number*(number-1);
number--;
}
MessageBox.Show(result.toString());
}
چطوری تو پستهاتون کدهارو مثل سیشارپ رنگی مینویسین من بلد نیستم
bghad1
یک شنبه 16 خرداد 1389, 03:16 صبح
آخه اگه کد من رو هم تریس کنین فکر نمی کنم به مشکلی بر بخورین توی جواب!!!!!!!:گیج:
میشه یه نگاه بندازین لطفاً؟؟:خجالت:
ممنون...
چطوری تو پستهاتون کدهارو مثل سیشارپ رنگی مینویسین من بلد نیستم
کار خاصی نمی کنم دوست من...
کدها رو از VS کپی می کنم و میارم اینجا paste می کنم فقط...همین...:چشمک:
میلاد قاضی پور
یک شنبه 16 خرداد 1389, 03:42 صبح
گرامی من درسته ممکنه کد شما کار کنه اما شما باید بتونید الگوریتم اون کد رو بنویسید. کد خوب کمترین پیچیدگی رو داره . جایی ننوشته فاکتوریل رو با چه کدی بنویسیم ولی ملاک سادگی کد هست. مسلما استفاده از توابع بازگشتی جزو بهترین روشهای نوشتن فاکتوریل هست و این روشها دیگه برای مهد کودکه که ما استفاده میکنیم .
shecarchi
یک شنبه 16 خرداد 1389, 06:03 صبح
تو حلقت i رو از یک شروع کن و بنویس p*=i;
exlord
یک شنبه 16 خرداد 1389, 10:47 صبح
public int factorial(int num)
{
int fact = 1;
for (int i = num; i > 0; i--)
{
fact *= i;
}
return fact;
}
exlord
یک شنبه 16 خرداد 1389, 10:49 صبح
سلام خدمت همه دوستای عزیزم....
یه چیزی برام خیلی عجیبه!!!!!!!
یه متد نوشتم برای محاسبه فاکتوریل..اونوقت اشتباه جواب می ده!!!!!!!!:گیج:
در صورتیکه هرچی trace میکنمشم چیزی دستگیرم نمی شه که چرا اینجوریه!!!!!!!!!!!!:عصبانی:
کد :
publicstaticint Factoriel(int fact)
{
int p = 1;
for (int i = 0; i <= fact; i++)
{
//Console.WriteLine("\n" + i+". " + fact + " " + p);
p *= fact;
fact--;
//Console.Write("\n"+ i+". " +fact + " " + p);
}
return p;
}
این کد هم اشتباه نیست فقط حلقت به اندازه fact+1 بار اجرا میشه ... I رو از 1 شروع کن ...
mehrsa_fr
یک شنبه 16 خرداد 1389, 19:31 عصر
بدونه استفاده کردن از حلقه ها هم میشه
private int Factorial(int Nu1)
{
if (Nu1 == 1)
{
return 1;
}
else
{
return Factorial(Nu1 - 1) * Nu1;
}
}
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.