پیدا کردن فاکتوریل یک عدد، نقش مهمی در تجزیه و تحلیل دادهها و سایر تحلیلهای ریاضیاتی در پایتون به حساب میآید. در این مقاله به آموزش نحوه محاسبه فاکتوریل در پایتون به سه مختلف خواهیم پرداخت، اما قبل از آنکه نحوه محاسبه فاکتوریل در پایتون مورد را بررسی کنیم، ابتدا باید ببنیم فاکتوریل چه مفهومی در دنیای ریاضیات است.
فاکتوریل چیست
در ریاضیات، فاکتوریل یک عدد یعنی آن عدد در تمام اعداد طبیعی قبل از خود ضرب شود. فاکتوریل با علامت «!» نشان داده میشود. به این ترتیب، n فاکتوریل حاصل ضرب n عدد طبیعی اولیه است و به صورت !n نمایش داده میشود. به عنوان مثال، 5 فاکتوریل یا به شکل علمی !5 یعنی اعداد یک تا ۵ همگی باید در یکدیگر ضرب شوند. در صورت محاسبه ضرب اعداد ۱ تا ۵، مقدار پنج فاکتوریل که ۱۲۰ است به دست خواهد آمد. البته به این نکته دقت کنید که محاسبه فاکتوریل تنها برای اعداد مثبت قابل انجام و نمیتوان آنرا برای اعداد منفی استفاده کرد. علاوه بر این، فاکتوریل عدد صفر برابر یک است.
برنامه محاسبه فاکتوریل در پایتون
برای آنکه برنامه محاسبه فاکتوریل در پایتون را بنویسیم، باید از رویکرد الگوریتمنویسی فاکتوریل استفاده کنیم و مراحل را گام به گام بررسی کنیم تا تصویر روشنی به دست آید.
در ابتدا باید یک عدد صحیح مثبت از کاربر دریافت و در متغیر n قرار داده شود.
این عدد در متغیر factorial قرار داده شود.
یک شمارنده، به منظور شمارش ۱ تا n استفاده شود. این شمارنده برای افزایش تعداد ورودیهای داده شده استفاده میشود.
اکنون باید مقدار متغیر factorial در متغیر i ضرب شود و حاصل آن در factorial قرار بگیرد.
در صورتی که i از n کوچکتر باشد، باید دومرتبه به مرحله 4 بازگردیم.
خروجی یا فاکتوریل محاسبهشده عدد n نمایش داده میشود.
خاتمه اجرای کدها پایان میپذیرد.
همانگونه که مشاهده میکنید، الگوریتمنویسی به میزان قابل توجهی کار برنامهنویسان را ساده میکند و به مراتب بهتر از آن است که از همان ابتدا به سراغ کدنویسی برویم. در اینجا، الگوریتم محاسبه فاکتوریل یک عدد، پیچیده نیست. اکنون باید نحوه تبدیل الگوریتم به یک برنامه با استفاده از زبان برنامهنویسی پایتون را بررسی کنیم.
برای کدنویسی برنامه محاسبه فاکتوریل در پایتون روشهای مختلفی در دسترس هستند. از روشهای پر کاربرد در این زمینه به شرح زیر هستند:
استفاده از حلقه for
استفاده از تابع بازگشتی
استفاده از تابع factorial کتابخانه math
روش اول: محاسبه فاکتوریل در پایتون با حلقه for
در رویکرد تکرارشونده (Iterative)، با استفاده از الگوریتم ارائه شده در بخش قبلی، ابتدا یک عدد صحیح از کاربر دریافت میشود و در ادامه متغیری بهنام factorial تعریف و به آن مقدار یک اختصاص داده شود. اینکار با استفاده از کدهای زیر انجام میشود:
number = int(input("Enter an integer number: "))
factorial = 1
پس از نوشتن کدهای فوق، حلقه تکرار for نیاز داریم تا از طریق آن از 1 تا number پیمایش انجام شود. دقت کنید که تمام اعداد کوچکتر مساوی number درون این حلقه شمارش از یک تا خود آن عدد همگی در هم ضرب میشوند و در نهایت، حاصل در متغیر factorial قرار میگیرد. نحوه نوشتن حلقه تکرار for در ادامه آمده است:
...
for i in range(1, number+1):
factorial = factorial * i
مشابه مراحل ذکر شده در بخش کارکرد الگوریتم، اکنون باید مقدار محاسبه شده فاکتوریل موجود در متغیر factorial چاپ شود. کدهای زیر برای چاپ فاکتوریل عدد دریافت شده از کاربر استفاده میشوند:
…
print("The factorial of {} is: {}".format(number, factorial))
برای درک بهتر و اجتناب از هر گونه سردرگمی و ابهام، قطعه کد مربوط به محاسبه فاکتوریل با حلقه for در پایتون به شکل کامل در ادامه آمده است:
number = int(input("Enter an integer number: "))
factorial = 1
for i in range(1, number+1):
factorial = factorial * i
print("The factorial of {} is: {}".format(number, factorial))
اکنون برای آزمایش کدهای فوق، فاکتوریل عدد ۱۴ به عنوان مثال در ادامه محاسبه شده است:
please Enter integer number: 14
The factorial of 14 is: 87178291200
روش دیگر محاسبه فاکتوریل در پایتون، بهکارگیری توابع بازگشتی است.
روش دوم: محاسبه فاکتوریل در پایتون با تابع بازگشتی
علاوه بر حلقه تکرار، میتوان از تابع بازگشتی برای محاسبه فاکتوریل در پایتون استفاده کرد. منظور از توابع بازگشتی، توابعی هستند که برای اجرای بدون نقص باید بهطور مستمر فراخوانی شوند. این فراخوانیهای مستمر مادامیکه برنامه به پایه تابع برسد ادامه پیدا میکند. در مواقع، از توابع بازگشتی برای محاسبه دنبالههای ریاضی یا حل مسائل ریاضی استفاده میشود، زیرا یک فرمول تعریف شده وجود دارد که برای محاسبه پاسخ مسئله استفاده میشود.
بهطور کلی، با استفاده از روش بازگشتی، تابع به گونهای طراحی میشوند که در هر فراخوانی مسئله کوچکسازی میشود تا در نهایت به حالت پایه برسد. پس از آن، تابع فوق با بازگشت به عقب و جایگزینی مرحله به مرحله جوابهای به دست آمده در رابطه، به جواب اصلی مسئله میرسد. برای پیادهسازی تابع بازگشتی محاسبه فاکتوریل در پایتون، ابتدا باید یک تابع برای آن تعریف شود. تابع بازگشتی (factorial) با استفاده از کدهای زیر تعریف میشود:
def factorial(n):
if n == 0:
return 1
دقت کنید در تابع فوق یک شرط با استفاده از دستور If نوشته شده است. اگر مقدار دریافتی از کاربر (متغیر n) برابر صفر باشد، این دستور شرطی مقدار یک را در خروجی بر میگرداند. همانگونه که اشاره شد، فاکتوریل عدد صفر برابر یک است. اکنون پس از دستور if باید شرط دیگری هم اضافه میشود. این شرط زمانی اجرا میشود که عدد دریافتی از کاربر مقداری به غیر از صفر باشد. کدهای مربوطه به شرح زیر است:
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
نکته مهمی که در مورد تابع فوق باید به آن دقت کنید این است که پس از دریافت عدد توسط این تابع، تا زمانی که تابع به مقدار یک برسد، به صورت بازگشتی و داخلی در برنامه فراخوانی میشود. زمانی که برنامه به پایه تابع بازگشتی یعنی عدد ۱ رسید، جواب اصلی با جایگزین کردن هر جواب در تابع قبلی خود حاصل میشود. اکنون با کمک کدهای فوق عددی از کاربر دریافت میشود:
...
number = int(input("please Enter integer number: "))
result = factorial(number)
print("The factorial of {} is: {}".format(number, result))
برنامه کامل محاسبه فاکتوریل در پایتون از طریق تابع بازگشتی را میتوان به صورت زیر نوشت:
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
number = int(input("please Enter integer number: "))
result = factorial(number)
print("The factorial of {} is: {}".format(number, result))
بهطور مثال، خروجی محاسبه فاکتوریل در پایتون با استفاده از تابع بازگشتی برای عدد ۵ به صورت زیر است:
please Enter integer number: 5
The factorial of 5 is: 120
روش سوم، محاسبه فاکتوریل در پایتون با تابع factorial کتابخانه math
ما میتوانیم محاسبه فاکتوریل در پایتون را از طریق بهکارگیری یک ماژول ریاضی قدرتمند در پایتون که Math نام دارد انجام دهیم. کتابخانه ریاضیات پایتون مجموعه گستردهای از متدهای کاربردی برای اجرای توابع ریاضی را در خود جای دادهاند. بهطور مثال، امکان استفاده از کتابخانه Math برای تولید اعداد تصادفی وجود دارد. البته ذکر این نکته ضروری است که قبل از استفاده از ماژول Math پایتون، باید آن را به پروژه اضافه (Import) کنید. پس از آن، میتوان با کمک تابع factorial از کتابخانه ریاضی پایتون، مقدار فاکتوریل عدد دریافتی را محاسبه کرد. برای محاسبه فاکتوریل در پایتون با کمک کتابخانه math به شرح زیر عمل میکنیم:
# Python code to demonstrate math.factorial()
import math
print (“The factorial of 23 is : “, end=””)
print (math.factorial(23))
Output :
The factorial of 23 is : 25852016738884976640000
حال اگر در نظر داشته باشیم یک مقدار منفی مثل -5 را محاسبه کنیم، این مرتبه پایتون پیغام خطا نشان میدهد، زیرا همانگونه که اشاره کردیم امکان محاسبه مقدار منفی در فاکتوریل وجود ندارد.
# Python code to demonstrate math.factorial()
# Exceptions ( negative number )
import math
print ("The factorial of -5 is : ",end="")
# raises exception
print (math.factorial(-5))
The factorial of -5 is :
Runtime Error :
Traceback (most recent call last):
File "/home/f29a45b132fac802d76b5817dfaeb137.py", line 9, in
print (math.factorial(-5))
ValueError: factorial() not defined for negative values
در این حالت برای پیشگیری از بروز خطاهایی مثل خطای قطعه کد بالا، باید اصلاحاتی در کدهایی که نوشتهایم اعمال کنیم تا مشکل برطرف شود. بهطور مثال، قطعه کد فوق را درون یک بلوک مدیریت استثنا قرار دهیم تا پیغامی به کاربر نشان دهد و برنامه بهطور غیر منتظره تمام نشود.
روش دیگری که برای حل این مشکل وجود دارد این است که در ابتدای برنامه محاسبه فاکتوریل یک دستور شرطی برای بررسی عدد دریافتی از کاربر قرار دهیم. این شرط به این دلیل قرار میگیرد که آیا عدد وارد شده توسط کاربر مثبت است یا منفی.
کدهای بهبود ویرایش شده مربوط به هر یک از روشهای محاسبه فاکتوریل در پایتون را بررسی میکنیم. در تمام این کدها قبل از محاسبه فاکتوریل در پایتون ، با استفاده از دستور شرطی if بررسی میشود که عدد وارد شده توسط کاربر منفی نباشد. کدهای ویرایش شده محاسبه فاکتوریل در پایتون با استفاده از حلقه for به شرح زیر بازنویسی میشوند.
def calculate_factorial(number):
if number == 1:
return number
else:
return number * calculate_factorial(number - 1)
اکنون برنامه ویرایش شده را به شرح زیر فراخوانی می کنیم:
number = 17
fact = calculate_factorial(number)
print("The factorial of {} is {}.".format(number, str(fact)))
خروجی قطعه کد فوق به شرح زیر است:
Our code returns: The factorial of 17 is 355687428096000.
منابع:
https://www.tutorialspoint.com/factorial-in-python
https://www.geeksforgeeks.org/factorial-in-python/
https://careerkarma.com/blog/python-factorial/