محاسبه فاکتوریل در پایتون

زمان مطالعه: 7 دقیقه
۰۲ مهر ۱۳۹۹

در دنیای برنامه‌نویسی، نوشتن یک برنامه برای حل مسائل ریاضی یکی از دلچسب‌ترین کارهای ممکن است. با نوشتن چند خط کد، می‌توانیم مسائلی که برای حل شدن به صورت دستی، به زمان قابل توجه‌ای نیاز دارند را در مدت زمانی کوتاه حل کنیم. پایتون، از آن دسته زبان‌های برنامه‌نویسی است که در علوم مختلف به ویژه ریاضیات کاربرد فراوانی دارد. در مقاله فاکتوریل در پایتون ، برنامه‌ای برای به دست آوردن فاکتوریل یک عدد می‌نویسیم. در ادامه با ما همراه باشید.

فهرست محتوای این مقاله

فاکتوریل چیست؟

در ریاضیات، فاکتوریل یک عدد، از حاصل‌ ضرب تمام اعداد صحیح از یک تا خود آن عدد، به‌دست می‌آید. به عنوان مثال فاکتوریل 5 برابر است با:

1*2*3*4*5 = 120

فاکتوریل فقط شامل اعداد صحیح مثبت است و برای اعداد منفی تعریف نشده است. ضمن آن که فاکتوریل عدد صفر همیشه یک است.

برنامه‌ی محاسبه‌ی فاکتوریل در زبان پایتون

در زبان برنامه‌نویسی پایتون، از چندین روش می‌توان برنامه‌ای نوشت که فاکتوریل یک عدد را محاسبه کند. در این مقاله روش‌های مختلف را بررسی می‌کنیم.

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

  1. یک عدد صحیح بگیر و در n قرار بده.
  2. عدد 1 را در factorial قرار بده.
  3. یک شمارنده به نام i انتخاب کن و 1 را در آن قرار بده.
  4. factorial را در i ضرب کن و در factorial قرار بده.
  5. اگر i از n کوچک‌تر است، به گام 4 برگرد.
  6. مقدار factorial را چاپ کن.
  7. به اجرای کد خاتمه بده.

همان‌گونه که ملاحظه می‌کنید محاسبه فاکتوریل یک عدد، به صورت الگوریتم کار راحتی است. در ادامه این الگوریتم را با زبان پایتون به یک برنامه تبدیل خواهیم کرد که رایانه آن را محاسبه کند.

روش اول: محاسبه‌ فاکتوریل با حلقه for پایتون

در این روش، با استفاده از الگوریتمی که نوشتیم، ابتدا یک عدد صحیح از کاربر گرفته و در ادامه متغیری با نام factorial تعریف می‌کنیم و مقدار 1 را به آن اختصاص می‌دهیم:

number = int(input("please Enter integer number: "))
factorial = 1

کار بعدی ما، نوشتن یک حلقه‌ی تکرار for است که از 1 تا number پیمایش کند و در آن تمام اعداد کوچک‌تر مساوی number از یک تا خودش در هم ضرب شده و حاصل در متغیر factorial قرار گیرد. به این صورت:

...

for i in range(1, number+1):
    factorial = factorial * i

تنها کاری که باید در ادامه انجام دهیم، چاپ کردن مقدار factorial به عنوان فاکتوریل عدد number است:

…

print("The factorial of {} is: {}".format(number, factorial))

کد کامل گرفتن فاکتوریل با حلقه for پایتون را می‌توانید در ادامه مشاهده کنید:

number = int(input("please Enter integer number: "))
factorial = 1

for i in range(1, number+1):
    factorial = factorial * i

print("The factorial of {} is: {}".format(number, factorial))

خروجی:

:خروجی کد برای عدد 12 به صورت زیر است

please Enter integer number: 12

The factorial of 12 is: 479001600

روش دوم: استفاده از توابع بازگشتی

در توابع بازگشتی، ابتدا یک حالت پایه در تابع طراحی شده و سپس همان تابع در خودش فراخوانی می‌شود. با این روش، تابع می‌تواند با کوچک کردن مسئله به حالت پایه رسیده و در ادامه با بازگشت به عقب و جایگزینی مرحله به مرحله‌ی جواب‌های به دست آمده در رابطه، به جواب اصلی مسئله برسد.

در این روش ابتدا باید تابعی تعریف کنیم. ما در اینجا آن تابع را factorial می‌نامیم. سپس با استفاده از دستور شرطی if بررسی می‌کنیم اگر عدد داده شده، 0 باشد عدد 1 را خروجی دهد. به این صورت:

def factorial(n):
    if n == 0:
        return 1

در غیر این صورت با دستور else حاصل ضرب n در (factorial(n – 1 را خروجی می‌دهیم:

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

نکته: هر عددی که به این تابع داده شود با فراخوانی تابع داخلی به صورت برگشتی به عقب برگشته تا به عدد 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))

خروجی:

:مثال: خروجی برای عدد 8 به صورت زیر است

please Enter integer number: 8

The factorial of 8 is: 40320

روش سوم: استفاده از تابع factorial کتابخانه‌ی math

با استفاده از کتابخانه‌ی غنی math می‌توانیم به سادگی، فاکتوریل یک عدد را به دست آوریم. برای این کار، ابتدا باید کتابخانه math را در برنامه وارد (import) کرده و سپس از تابع ()factorial برای رسیدن به جواب استفاده کنیم. به این صورت:

import math
number = int(input("please Enter integer number: "))
result = math.factorial(number)
print("The factorial of {} is: {}".format(number, result))

خروجی:

:مثال: خروجی برای عدد 6 به صورت زیر است

please Enter integer number: 6

The factorial of 6 is: 720

مدیریت خطاها

در کدهای نوشته شده، ممکن است کاربری عدد منفی در ورودی وارد کند که در این صورت ممکن است با خطایی مشابه خطای زیر مواجه شوند:

please Enter integer number: -13

Traceback (most recent call last):

File "c:/Users/Reza/Desktop/molhem/factorial.py", line 21, in <module>

result = math.factorial(number)

ValueError: factorial() not defined for negative values

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

کد بهبود یافته - فاکتوریل با حلقه for پایتون

number = int(input("please Enter integer number: "))

if number < 0:
    print("Sorry, factorial does not exist for negative numbers")
else:
    factorial = 1
    for i in range(1, number+1):
        factorial = factorial * i
print("The factorial of {} is: {}".format(number, factorial))

کد بهبود یافته - فاکتوریل با توابع بازگشتی

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

number = int(input("please Enter integer number: "))
if number < 0:
    print("Sorry, factorial does not exist for negative numbers")
else:
    result = factorial(number)
    print("The factorial of {} is: {}".format(number, result))

کد بهبود یافته - فاکتوریل با کتابخانه math

import math

number = int(input("please Enter integer number: "))

if number < 0:
    print("Sorry, factorial does not exist for negative numbers")
else:
    result = math.factorial(number)
    print("The factorial of {} is: {}".format(number, result))

خروجی هر سه کد بهبود یافته:

please Enter integer number: -13

Sorry, factorial does not exist for negative numbers

مطالعه‌ی مقالات زیر را جهت کسب اطلاعات بیشتر به شما توصیه می‌کنیم:

جمع‌بندی:

توانایی حل مسئله در برنامه‌نویسی از اهمیت بالایی برخوردار است. یک برنامه‌نویس باید برای حل مسائل پیش ‌روی خود، آن‌ها را به مسئله‌های کوچک‌تر تقسیم کرده و به مرور به آن‌ها شاخ و برگ دهد. راه‌های بی‌شماری برای نوشتن برنامه‌ها وجود دارد که هر شخص با توجه به دانش و استعداد خود یکی از آن‌ها را انتخاب می‌کند، اما یک برنامه‌نویس حرفه‌ای باید بهترین راه را برگزیند. همانند موضوع همین مقاله که با سه روش، یک برنامه برای محاسبه فاکتوریل در پایتون نوشتیم که هر سه برنامه به یک جواب رسید. امیدواریم مطالب ذکر شده برای شما مفید باشد.

روش شما برای محاسبه فاکتوریل در پایتون چیست؟ خوشحال می‌شویم نظرات خود را با ما به اشتراک بگذارید.

اگر به یادگیری بیشتر در زمینه‌ی برنامه نویسی پایتون علاقه داری، یادگیری زبان پایتون بسیار ساده است. و با شرکت در دوره‌ی متخصص پایتون توسعه وب در آینده می‌تونی اپلیکیشن موبایل و دسکتاپ بسازی و وارد حوزه‌ی هوش مصنوعی هم شوی.

چه امتیازی به این مقاله می دید؟
نویسنده عبدالرضا مولایی
هیچوقت برای یادگیری دیر نیست؛ همیشه چیزهای جدید برای آموختن وجود دارد.. این دو جمله، همیشه آویزه‌ی گوش منه، چون باعث میشه از یادگیری چیزهای تازه هراسی نداشته باشم.

نظرات کاربران

اولین دیدگاه این پست رو تو بنویس !

ارسال دیدگاه
خوشحال میشیم دیدگاه و یا تجربیات خودتون رو با ما در میون بذارید :