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

برنامه مربوط به نمایش فاکتوریل یک عدد،نیازمند به توضیح

0 امتیاز

سلام. از متد زیر برای محاسبه فاکتوریل یک عدد استفاده شده که بدون اشکال پاسخ را برمی گرداند. در قسمت return دوم، چطور بدون اینکه از حلقه ای استفاده شود اعداد قبل از n  در هم ضرب می شوند؟ مثلا عدد 5 را در نظر میگیریم که اگر در فرمول جایگذاری کنیم return(5*fact(n-1) که در واقع میشود 4*5 که برابر با 20 است در صورتی که فاکتوریل 5 برابر با 120 است. و سوال دوم اینکه چرا مقدار بازگشتی متد از نوع double است؟ با تشکر

 

static double fact(int n)

      }
            if (n == 1)
              ; return 1.0
            else
            ;  return (n * fact(n - 1))
           {

سوال شده مرداد 4, 1399  بوسیله ی golden.light (امتیاز 43)   6 7 10

2 پاسخ

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

سلام.دوست عزیز پیشنهاد می کنم مبحث توابع بازگشتی در برنامه نویسی رو بیشتر و دقیقتر مطالعه بفرمایید.بنده اینجا مختصرا خدمتتون توضیح عرض می کنم.

تابع fact به طور بازگشتی به کار گرفته شده.یعنی داخل خودش ، خودش رو فراخوانی میکنه.به طور مثال برای عدد 5 روال فراخوانی تابع fact به این شکل میشه :

fact(5)= 5 * fact(4)
fact(4)= 4 * fact(3)
fact(3)= 3 * fact(2)
fact(2)= 2 * fact(1)
fact(1) : return 1.0

 
یعنی هر کدوم از fact های سمت راست ،خط زیریش رو صدا میزنه و منتظر جواب میمونه.تا برسه به خط آخر.
خط آخر 1 رو برمیگردونه به خط بالایی(خط 4)
 
خط چهارم 1 رو دریافت میکنه و در 2 ضرب میکنه و جواب(2) رو برمیگردونه به خط بالایی(خط 3)
 
خط سوم 2 رو دریافت میکنه و در 3 ضرب میکنه و جواب(6) رو برمیگردونه به خط بالایی.
 
و الی آخر تا برسه به خط اول که جواب نهایی میشه 120
 
در مورد اینکه چرا نوع تابع double هست هم عرض کنم که اجباری در کارنیست و می تونه int هم باشه. که در اون صورت return 1.0 باید اصلاح بشه به return 1
 

پاسخ داده شده مرداد 4, 1399 بوسیله ی ik (امتیاز 571)   1 2 8
انتخاب شد مرداد 5, 1399 بوسیله ی golden.light
از توضیحات شما بسیار سپاسگزارم.
0 امتیاز
در مورد پاسخ دوست عزیزمون کاملا صحیح است.

ولی علت انتخاب double به جای int  به خاطر محدوده ارقام این دو نوع است یعنی int نهایتا می تواند تا عدد 2,147,483,647 را نمایش دهد ولی دوبل خیلی بیشتر از اینهاست

در کل اگه به جای دوبل از اینت استفاده کنی نهایتا می توانی فاکتوریل 16 رو حساب کنی(2004189184) و فاکتوریل اعداد بالاتر از 16 رو به شما اشتباه نشون می ده یا خطا می ده.
پاسخ داده شده آبان 9, 1399 بوسیله ی moh_d60 (امتیاز 67)   1
...