برنامه فاکتوریل به دو روش بازگشتی و تکراری - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

برنامه فاکتوریل به دو روش بازگشتی و تکراری

+1 امتیاز

سلام
دوستان برنامه فاکتوریل n رو به دو روش میخوام بنویسم .
یکی بازگشتی و دیگری تکراری
منتها
اول که میخوام راهنماییم کنید کد ها رو چجوری بنویسم ؟
دوم میخوام یه تکست باکس باشه که عدد رو بگیره بعد یک دکمه که بعد از کلیک روی یه لیبل محاسبه فاکتوریل و روی لیبل دیگه زمان اجراش نوشته بشه . ممنون میشم راهنماییم کنید

سوال شده اسفند 15, 1392  بوسیله ی aminomidi (امتیاز 82)   2 3 7
دوباره تگ گذاری شد اسفند 15, 1392 بوسیله ی BlueBlade

1 پاسخ

+2 امتیاز
 
بهترین پاسخ

سلام.

فرمول کلی فاکتوریل به این صورت هست :

N! =  1 * 2 * 3 * 4 * ... * N

همچنین دو تا مورد پیش فرض برای فاکتوریل وجود داره و اونم اینه که فاکتوریل 1 و 0 میشه 1 .

با توجه به این نکات راحت تر میشه برنامه مورد نظر رو نوشت :

در حالت بازگشتی از خود عدد شروع میکنن و هر مرحله اونو در عدد یکی کمترش ضرب میکنن تا زمانیکه به 1 برسه (چون فاکتوریل 1 میشه 1 و دیگه بیشتر از این نباید ریزش کرد و ادامه داد. این نکته در تمام مسائل بازگشتی یه نکته اساسی هست و باید یه شرط برای خاتمه کار در نظر گرفت).

public partial class Form1 : Form
    {
        public long fact(int n)
    {
        if (n == 0 || n ==1)
            return 1;
        else
            return n * fact(n - 1);       
    }
       
        private void button1_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(textBox1.Text ))
                MessageBox.Show("عدد مورد نظرتان را وارد کنید");
            else
            {
                long fact = fact(Int32.Parse(textBox1.Text);
                MessageBox.Show(string.Format("factoriel {0} is : {1}", textBox1.Text, fact));
            }
        }
    }

و اگر از روش بازگشتی استفاده نکنید، طبق همون فرمول اصلی باید از 1 تا خود عدد رو بصورت یکی یکی در هم ضرب کنید (مثلا برای !4 میشه 1 * 2 * 3 * 4 ) :

private void button1_Click(object sender, EventArgs e)
        {
            long fact = 1;
            for (int i = 2; i <= Convert.ToInt32(textBox1.Text); i++)
            {
                fact *= i;
            }
            MessageBox.Show(string.Format("factoriel {0} is : {1}", textBox1.Text, fact));
        }

موفق باشید.

پاسخ داده شده اسفند 15, 1392 بوسیله ی veniz2008 (امتیاز 2,083)   1 5 21
انتخاب شد فروردین 8, 1393 بوسیله ی BlueBlade
veniz2008 ممنونم از راهنمایی شما . ولی وقتی برنامه رو می نویسم از fact ارور می گیره و میگه که یک وریایبل هستش و بعنوان متد استفاده شده . راه حل چیه ؟
کدها تست شده هستن. مطمئنا یه موردی رو دقت نکردید. اتفاقا کدها رو بصورت کامل گذاشتم که اگر copy و paste کردید هم مشکلی نداشته باشید.
ممنونم از لطف شما . برنامه به زبان سی شارپ هستش ؟؟؟ من هم اتفاقا کپی کردم ولی متاسفانه جوابی نگرفتم
سلام چطوری میشه از این برنامه استفاده کرد با کپی پیست نمیشه چرا؟ ارور میده..
...