PDA

View Full Version : سوال: چه طور میشه که این تابع فاکتوریل اشتباه جواب می ده؟!



bghad1
یک شنبه 16 خرداد 1389, 01: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, 01: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, 02: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, 02:16 صبح
آخه اگه کد من رو هم تریس کنین فکر نمی کنم به مشکلی بر بخورین توی جواب!!!!!!!:گیج:

میشه یه نگاه بندازین لطفاً؟؟:خجالت:

ممنون...



چطوری تو پستهاتون کدهارو مثل سیشارپ رنگی مینویسین من بلد نیستم



کار خاصی نمی کنم دوست من...
کدها رو از VS کپی می کنم و میارم اینجا paste می کنم فقط...همین...:چشمک:

میلاد قاضی پور
یک شنبه 16 خرداد 1389, 02:42 صبح
گرامی من درسته ممکنه کد شما کار کنه اما شما باید بتونید الگوریتم اون کد رو بنویسید. کد خوب کمترین پیچیدگی رو داره . جایی ننوشته فاکتوریل رو با چه کدی بنویسیم ولی ملاک سادگی کد هست. مسلما استفاده از توابع بازگشتی جزو بهترین روشهای نوشتن فاکتوریل هست و این روشها دیگه برای مهد کودکه که ما استفاده میکنیم .

shecarchi
یک شنبه 16 خرداد 1389, 05:03 صبح
تو حلقت i رو از یک شروع کن و بنویس p*=i;

exlord
یک شنبه 16 خرداد 1389, 09:47 صبح
public int factorial(int num)
{
int fact = 1;
for (int i = num; i > 0; i--)
{
fact *= i;
}
return fact;
}

exlord
یک شنبه 16 خرداد 1389, 09: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, 18:31 عصر
بدونه استفاده کردن از حلقه ها هم میشه


private int Factorial(int Nu1)
{
if (Nu1 == 1)
{
return 1;
}
else
{
return Factorial(Nu1 - 1) * Nu1;
}
}