فاکتوریل با تابع بازگشتی پایتون
یکی از لذت بخشترین کارهای برنامه نویسی، حل مسائل مختلف با نوشتن کد است. به خصوص مسائل پیچیده که اگر بخواهیم آنها را به صورت دستی انجام دهیم، به زمان زیادی نیاز خواهد داشت. فاکتوریل اعداد از جمله مواردی است که اگر بخواهیم آن را به صورت دستی انجام دهیم، کاری بسیار سخت و دشوار خواهد بود. بهترین راه برای محاسبه فاکتوریل عدد کمک گرفتن از زبان برنامه نویسی پایتون است. برای محاسبه فاکتوریل در python راههای مختلفی از جمله استفاده از حلقه for، استفاده از کتابخانه math و دنباله بازگشتی وجود دارد. در این نوشته قصد داریم روش محاسبه فاکتوریل با تابع بازگشتی پایتون را با شما به اشتراک بگذاریم.
در ریاضیات، فاکتوریل را از ضرب همه اعداد صحیح از عدد 1 تا خود آن عدد به دست میآورند. به طور مثال اگر قصد محاسبه فاکتوریل 8 را داشته باشید باید به شکل زیر عمل نمایید.
1*2*3*4*5*6*7*8 = 40320
دقت داشته باشید که فاکتوریل فقط برای اعداد صحیح مثبت کاربرد دارد و برای اعداد منفی لحاظ نمیشود. همچنین فاکتوریل عدد 0 برابر با 1 است.
آشنایی با تابع بازگشتی یا Recursive function
قبل از ورود به بحث اصلی یعنی محاسبه فاکتوریل با تابع بازگشتی در پایتون، بهتر است کمی با مفهوم این تابع آشنا شویم. Recursive function به تابعی گفته میشود که خود را از داخل بدنه فراخوانی میکند. تابع بازگشتی برای اجرای کامل، پی در پی خود را فراخوانی میکند تا زمانی که برنامه به پایه تابع برسد. از این تابع معمولا برای محاسبه دنبالههای ریاضی استفاده میکنند. به این صورت که تابع در هر مرحله، مساله را به بخشهای کوچک تقسیم میکند تا به حالت پایه برسد. بعد از رسیدن به حالت پایه نیز به عقب برگشته و مرحله به مرحله به جواب اصلی دست پیدا میکند.
بهتر است بدانید، تابع بازگشتی یک مفهوم برنامه نویسی است که علاوه بر پایتون در سایر زبانهای برنامه نویسی مثل جاوا اسکریپت، C++ و در جاوا نیز کاربرد دارد.
در حالت کلی، الگوریتم فاکتوریل به شکل زیر است:
- یک عدد صحیح از کاربر دریافت کرده و آن را داخل متغیر n ذخیره میکنیم.
- متغیری دیگری با نام دلخواه مثل factorial تعریف کرده و مقدار آن را برابر با 1 قرار میدهیم.
- یک شمارنده (این وظیفه را تابع بازگشتی انجام میدهد) تعریف میکنیم تا اعداد را از 1 تا عدد وارد شده توسط کاربر شمارش کند.
- در قدم بعدی، مقدار متغیر factorial را در n ضرب کرده و حاصل آن را در factorial ذخیره میکنیم.
- تا زمانی که i از n کوچکتر باشد، این مراحل ادامه پیدا میکند. به طور مثال، اگر نتیجه n-1 در تابع فاکتوریل برابر با صفر شد، کار تابع تمام میشود.
- در نهایت نتیجه به دست آمده را به کاربر نشان میدهیم.
از این الگوریتم علاوه بر محاسبه فاکتوریل با تابع بازگشتی در پایتون، میتوانید برای محاسبه فاکتوریل در سایر زبانها و حتی سایر روشها در پایتون استفاده نمایید.
آموزش محاسبه فاکتوریل با تابع بازگشتی پایتون
برای پیادهسازی و محاسبه فاکتوریل در پایتون ابتدا یک تابع با نام factorial تعریف میکنیم. سپس در داخل تابع یک شرط قرار میدهیم تا هر زمان متغیر n به صفر رسید، مقدار 1 را برگرداند و کار تابع به اتمام برسد. همانطور که قبلا اشاره کردیم، فاکتوریل عدد 0 برابر با 1 است.
if n == 0:
return 1
در خط بعدی و در داخل دستور else، عدد دریافتی از کاربر یعنی n را در n-1 ضرب میکنیم. تا زمانی که نتیجه n-1 برابر با صفر شود، تابع به کار خود ادامه خواهد داد. به طور مثال اگر کاربر عدد 5 را وارد کند، ابتدا 5 در عدد 4 ضرب میشود. سپس عدد به دست آمده از عملیات قبلی یعنی 20 در عدد 3 ضرب خواهد شد تا به صفر برسد.
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
برای دریافت یک عدد از کاربر از کدهای زیر استفاده کنید. این قطعه کد یک عدد را از کاربر قرار گرفته و در متغیر n قرار میدهد.
number = int(input(“please Enter Your number: “))
result = factorial(number)
print(“The factorial of {} is: {}”.format(number, result))
اگر این کد را اجرا کرده و به طور مثال عدد 8 را وارد نمایید، به خروجی زیر خواهید رسید.
please Enter Your number: 8
The factorial of 5 is: 40320
در هر مرحله ممکن است کاربر عدد اشتباهی را به عنوان ورودی ارائه کند. برای جلوگیری از این خطاها بهتر است از دستورات شرطی استفاده نمایید. به طور مثال اگر کاربر یک عدد منفی را وارد کرد، پیغام «عدد وارد شده باید مثبت باشد» را به او نمایش دهید. به همین منظور بهتر است کد بالا را به شکل زیر اصلاح کنید.
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
number = int(input(“please Enter Your number: “))
if number < 0:
print(“Error: factorial does not exist for negative numbers”)
else:
result = factorial(number)
print(“The factorial of {} is: {}”.format(number, result))
جمعبندی
اولین کاری که برای محاسبه فاکتوریل با تابع بازگشتی پایتون باید انجام دهید، آشنایی با مفاهیم فاکتوریل و تابع بازگشتی است. زمانی که مفهوم این دو را به طور کامل درک کنید، پیادهسازی آن کار سادهای خواهد بود. حتی میتوانید آن را با سایر زبانهای برنامه نویسی نیز به سادگی اجرا کنید. در این نوشته سعی کردیم مراحل انجام اینکار را قدم به قدم توضیح دهیم. امیدواریم به طور کامل آن را یاد گرفته باشید.
در صورتی که به زبان پایتون و برنامه نویسی با آن علاقه دارید، توصیه میکنیم در یکی از دورههای آموزش پایتون مکتب خونه شرکت کنید. با شرکت در این دورهها همه مباحث مربوط به این زبان را به طور کامل یاد میگیرید. بعد از اتمام دوره و انجام تمرینهای مربوطه امکان ورود به بازار کار نیز وجود دارد.