فاکتوریل در برنامهنویسی c چیست؟
آشنایی با فاکتوریل
در این مطلب میخواهیم به مفهوم فاکتوریل در برنامهنویسی c بپردازیم. ابتدا مفهوم خود فاکتوریل را مرور میکنیم.
همان طور که میدانید در ریاضیات فاکتوریل یک عدد، حاصل ضرب تمام اعداد صحیح نزولی مثبت از آن عدد تا عدد یک است. فاکتوریل nبا n! نشان داده می شود.
به عنوان مثال :
۵! = ۵ * ۴ * ۳ * ۲ * ۱ = ۱۲۰
۳! = ۳ * ۲ * ۱ = ۶
در اینجا، !۵ به عنوان “۵ فاکتوریل” تلفظ می شود، به آن ۵ ‘bang’ یا ۵ ‘shriek’ نیز می گویند.
به طور کلی فاکتوریل عدد طبیعی n به صورت زیر تعریف میشود :
n! = n * ( n – ۱ ) * ( n – ۲ ) * …. * ۲ * ۱
فاکتوریل معمولاً در ترکیبات و جایگشت ها در ریاضیات استفاده می شود.
توجه داشته باشید که :
- اعداد منفی فاکتوریل ندارند.
- یه صورت قراردادی فاکتوریل عدد صفر و یک برابر است با ۱٫ ۰! = ۱ ۱! = ۱
روشهای نوشتن برنامه فاکتوریل به زبان c
راههای زیادی برای نوشتن برنامه فاکتوریل به زبان c وجود دارد، در ادامه ۲ روش برای این کار معرفی میشود :
- برنامه فاکتوریل با استفاده از حلقه یا تابع غیر بازگشتی
- برنامه فاکتوریل با استفاده از تابع بازگشتی
برنامه فاکتوریل در برنامهنویسی c با استفاده از حلقه
با استفاده از حلقهی for برنامه بعد از دریافت عدد n آن را وارد حلقه میکند و تا زمانی که شمارنده حلقه به عدد ورودی یعنی n برسد برنامه اجرا خواهد شد سپس بعد از رسیدن شمارنده به n فاکتوریل n را محاسبه کرده و چاپ میکند.
برنامه فاکتوریل در برنامهنویسی c با استفاده از حلقه:
#include<stdio.h>
int main() { int i,fact=1,number; printf(“Enter a number: “); scanf(“%d”,&number); for(i=1;i<=number;i++){ fact=fact*i; } printf(“Factorial of %d is: %d”,number,fact); return 0; } |
خروجی این برنامه با عدد ورودی n = 5 به شکل زیر خواهد بود:
Enter a number : 5
Factorial of 5 is : 120 |
برنامه فاکتوریل در برنامهنویسی c با استفاده از تابع بازگشتی
تابع بازگشتی تابعی است که از درون خودش فراخوانی میشود. به عبارت دیگر در زبان برنامهنویسی، اگر برنامه اجازهی فراخوانی یک تابع را درون خودش بدهد یک فراخوانی بازگشتی از تابع اتفاق رخ داده است.
زبان برنامهنویسی c از فراخوانی تابع بازگشتی پشتیبانی میکند البته نکتهای که برنامهنویسها و توسعهگرها باید به آن توجه کنند این است که شرایط خروج از برنامه را در یک تابع بازگشتی مشخص کنند در غیر این صورت برنامه وارد یک حلقه بینهایت خواهد شد.
استفاده از تابع بازگشتی در بسیاری از زبانهای برنامهنویسی به عنوان یک شیوه حل مساله بسیار مفید در برنامه-نویسی رایج است، مانند محاسبه فاکتوریل یک عدد، تولید سری فیبوناچی، و … .
الگوریتم بازگشتی فاکتوریل، یک فرمول ساده و به این صورت است که فاکتوریل عدد n برابر حاصل ضرب n در فاکتوریل عدد n-1 است. به عبارت دیگر برای محاسبه فاکتوریل یک عدد می توان آن عدد را در فاکتوریل عدد قبلیاش ضرب کرد.
!n! = n * ( n – ۱ )
هر تابع بازگشتی شامل دو بخش مهم است:
- یک عبارت حاوی فراخوانی خود تابع
- یک شرط برای انتخاب بین فراخوانی مجدد و پایان
برنامه فاکتوریل در برنامهنویسی c با استفاده از تابع بازگشتی:
#include<stdio.h>
long factorial(int n) { if (n == 0) return 1; else return(n * factorial(n-1)); }
void main() { int number; long fact; printf(“Enter a number: “); scanf(“%d”, &number);
fact = factorial(number); printf(“Factorial of %d is %ld\n”, number, fact); return 0; } |
الگوریتم بازگشتی فاکتوریل، یک فرمول ساده و به این صورت است که فاکتوریل عدد n برابر حاصل ضرب n در فاکتوریل عدد n-1 است. به عبارت دیگر برای محاسبه فاکتوریل یک عدد می توان آن عدد را در فاکتوریل عدد قبلیاش ضرب کرد.
n! = n * ( n – ۱ )!
هر تابع بازگشتی شامل دو بخش مهم است :
- یک عبارت حاوی فراخوانی خود تابع
- یک شرط برای انتخاب بین فراخوانی مجدد و پایان
برنامه فاکتوریل در برنامهنویسی c با استفاده از تابع بازگشتی:
#include<stdio.h>
long factorial(int n) { if (n == 0) return 1; else return(n * factorial(n-1)); }
void main() { int number; long fact; printf(“Enter a number: “); scanf(“%d”, &number);
fact = factorial(number); printf(“Factorial of %d is %ld\n”, number, fact); return 0; } |
خروجی این برنامه با ورودی n = 6 به صورت زیر خواهد بود:
Enter a number : 6
Factorial of 5 is : 720 |