از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
محاسبه فاکتوریل با جاوا اسکریپت – تکراری و بازگشتی فاکتوریل یک عدد حاصل ضرب آن عدد صحیح و تمام اعداد صحیح مثبت کوچکتر یا مساوی با آن است. باید یک عدد صحیح مثبت باشد – در غیر این صورت، منطق تا بی نهایت منفی گسترش می یابد. به عبارت دیگر – محاسبه فاکتوریل به معنای ضرب کل کل …
سرفصلهای مطلب
معرفی
آ فاکتوریل یک عدد حاصل ضرب آن عدد صحیح و تمام اعداد صحیح مثبت کوچکتر یا مساوی با آن است. باید یک عدد صحیح مثبت باشد – در غیر این صورت، منطق تا بی نهایت منفی گسترش می یابد. به عبارت دیگر – محاسبه فاکتوریل به معنای ضرب تمام اعداد صحیح بین یک عدد و یک است.
0! طبق قرارداد برابر با 1 است و از قانون استاندارد پیروی نمی کند.
فاکتوریل با عدد صحیحی که برای آن فاکتوریل محاسبه می کنیم نشان داده می شود و به دنبال آن علامت تعجب می آید.
5 الف را نشان می دهد فاکتوریل از پنج.
و برای محاسبه فاکتوریل، عدد را در هر عدد صحیح کوچکتر از آن ضرب می کنیم تا به 1 برسیم:
5! = 5 * 4 * 3 * 2 * 1
5! = 120
در این آموزش روش محاسبه فاکتوریل یک عدد صحیح با جاوا اسکریپت را با استفاده از حلقه ها و بازگشتی خواهیم آموخت.
محاسبه فاکتوریل با استفاده از حلقه ها
ما می توانیم فاکتوریل ها را با استفاده از هر دو محاسبه کنیم while
حلقه و for
حلقه ما به طور کلی فقط به یک شمارنده برای خاتمه حلقه و عدد ارائه شده که برای آن فاکتوریل محاسبه می کنیم نیاز داریم.
بیایید با شروع کنیم for
حلقه:
function getFactorialForLoop(n) {
let result = 1;
if (n > 1) {
for (let i = 1; i <= n; i++) {
result = result * i;
}
return result;
}
else {
return "n has to be positive";
}
}
شما احتمالاً توانسته اید مشاهده کنید که ما شمارش را از آنجا شروع می کنیم 1، نه n
– حتی اگر در تعریف فاکتوریل آمده است که ما از آن می رویم n
به 1. اگرچه، از نظر ریاضی، این عبارات معادل هستند:
$$
1 * 2 * 3 * 4 … * n = n * (n-1) * (n-2) * (n-3) * (n-4) … * (n – (n-1) )
$$
برای ساده کردن،
(n - (n-1))
همیشه برابر خواهد بود 1.
این بدان معناست که مهم نیست در کدام جهت حساب می کنیم. می تواند از 1 و افزایش به سمت n
، یا می تواند از آن شروع شود n
و به سمت کاهش می یابد 1. اکنون که این موضوع روشن شد، بیایید نگاهی به آنچه در این روش رخ می دهد بیاندازیم.
می پذیرد n
، عددی که برای آن فاکتوریل محاسبه می کنیم. یک ارزش از 1
به یک مکان نگهدار اختصاص داده شده است result
متغیری که در نهایت به روز می شود.
چرا تخصیص 1 و نه 0 یا جای خالی دیگر؟
اگر قرار بود تعیین کنیم 0 به آن – تمام ضرب های زیر با a خواهد بود 0. این فقط با یک ختم می شود 0 در پایان.
سپس ما خود را شروع می کنیم for
حلقه با تعریف i
به عنوان شمارنده ای که از آن شروع می شود 1
. توجه داشته باشید که عبارت شرط است i <= n;
به منظور گنجاندن n
خودش هم همینطور
درون for
حلقه، مقدار فعلی را ضرب می کنیم result
با ارزش فعلی شاخص ما i
– انجام عملیات از روی تعریف به صورت معکوس.
در نهایت مقدار نهایی the را برمی گردانیم result
به عنوان خروجی روش بیایید عملکرد خود را در مرورگر خود آزمایش کنیم console و print از نتیجه حتما تابع فاکتوریل را در مرورگر وارد کنید console اولین:
var inp = window.prompt("Enter a number: ");
inp = parseInt(inp);
alert("The result is: " + getFactorialForLoop(inp));
از کاربر می خواهد که ورودی بدهد. ما آن را امتحان خواهیم کرد 4
. هنگامی که اسکریپت هشدار را اجرا می کنید، یک پاپ آپ با نتیجه مشاهده خواهید کرد:
24
می توانید از یک ماشین حساب برای تأیید نتیجه استفاده کنید:
4! است 4 * 3 * 2 * 1
، که نتیجه می شود 24.
حال بیایید ببینیم چگونه می توانیم فاکتوریل را با استفاده از عدد محاسبه کنیم while
حلقه در اینجا تابع اصلاح شده ما است:
function getFactorialWhileLoop(n) {
let result = 1;
while (n > 1) {
result = result * n;
n -= 1;
}
return result;
}
این بسیار شبیه به for
حلقه به جز این زمان که ما در حال حرکت از n
به سمت 1 – به تعریف ریاضی نزدیک تر است. بیایید عملکرد خود را آزمایش کنیم:
var inp = window.prompt("Enter a number: ");
inp = parseInt(inp);
alert("The result is: " + getFactorialWhileLoop(inp));
مثل قبل اگه وارد بشیم 4
ما گرفتیم 24
. محاسبه بود 4*3*2*1
و نتیجه نهایی مانند قبل است.
فاکتوریل ها هستند بازگشتی در طبیعت، و استفاده از بازگشت یک رویکرد طبیعی تر برای تکرار عملیاتی مانند این چندین بار است.
محاسبه فاکتوریل با استفاده از بازگشت
تابع بازگشتی تابعی است که خود را صدا می کند. ممکن است در ابتدا کمی ترسناک به نظر برسد، اما ما را تحمل کنید و خواهید دید که درک توابع بازگشتی آسان است.
به طور کلی، هر تابع بازگشتی دارای دو جزء اصلی است: الف مورد پایه و الف گام بازگشتی.
موارد پایه کوچکترین نمونه های مشکل هستند – این همان چیزی است که تکرار می شود. همچنین یک break، موردی که مقدار و اراده را برمی گرداند برو بیرون از بازگشت از نظر توابع فاکتوریل، حالت پایه زمانی است که عنصر نهایی فاکتوریل را برمی گردانیم 1.
بدون کیس پایه یا با قاب پایه نادرست، تابع بازگشتی شما می تواند بی نهایت اجرا شود و باعث سرریز شود.
مراحل بازگشتی – همانطور که از نام آن پیداست – قسمت بازگشتی تابع هستند که در آن کل مسئله به چیزی کوچکتر تبدیل می شود. اگر گام بازگشتی نتواند مشکل را کوچک کند، دوباره بازگشت می تواند بی نهایت اجرا شود.
بخش تکرار شونده فاکتوریل ها را در نظر بگیرید:
- 5 است
5 * 4 * 3 * 2 * 1
.
اما ما همچنین می دانیم که:
4 * 3 * 2 * 1
است 4!.
به عبارت دیگر 5 است 5 * 4!
، و 4! است 4 * 3!
و غیره روی.
بنابراین می توانیم بگوییم
n! = n * (n-1)!
. این مرحله بازگشتی فاکتوریل ما خواهد بود!
بازگشت فاکتوریل با رسیدن به پایان می رسد 1. این ما خواهد بود مورد پایه. ما بر میگردیم 1
اگر n
است 1
یا کمتر، ورودی صفر را پوشش می دهد.
بیایید نگاهی به تابع فاکتوریل بازگشتی خود بیندازیم:
function getFactorialRecursively(n) {
if (n <= 1) {
return 1;
}
else{
return n * getFactorialRecursively(n-1);
}
}
همانطور که می بینید if
بلوک ما را مجسم می کند مورد پایه، در حالی که else
بلوک را پوشش می دهد گام بازگشتی.
بیایید عملکرد خود را آزمایش کنیم:
var inp = window.prompt("Enter a number: ");
inp = parseInt(inp);
alert("The result is: " + getFactorialRecursively(inp));
وارد خواهیم شد 3
به عنوان ورودی این بار، و هشدار خواهد شد print 6
در نتیجه.
همین نتیجه را می گیریم. اما این بار آنچه زیر کاپوت می رود بسیار جالب است:
ببینید، وقتی ورودی را وارد می کنیم، تابع با علامت بررسی می شود if
بلوک، و از آنجایی که 3 بزرگتر از 1 است، به قسمت رد می شود else
مسدود کردن. در این بلوک، خط را می بینیم return n * getFactorialRecursively(n-1);
.
ما ارزش فعلی را می دانیم
n
در حال حاضر، آن است3
، ولیgetFactorialRecursively(n-1)
هنوز قابل محاسبه است
سپس برنامه یک بار دیگر همان تابع را فراخوانی می کند. ولی این بار عملکرد ما طول می کشد 2 به عنوان پارامتر آن را بررسی می کند if
مسدود کردن و پرش به else
مسدود می کند و دوباره با آخرین خط روبرو می شود. در حال حاضر، ارزش فعلی از n
است 2
اما برنامه همچنان باید محاسبه کند getFactorialRecursively(n-1)
.
بنابراین یک بار دیگر تابع را فراخوانی می کند، اما این بار if
بلاک، یا بهتر است بگوییم، کلاس پایه موفق به بازگشت 1 می شود و از بازگشت خارج می شود.
با پیروی از همان الگوی به سمت بالا، نتیجه هر تابع را برمی گرداند و نتیجه فعلی را با قبلی ضرب می کند n
و آن را برای فراخوانی تابع قبلی برگردانید. به عبارت دیگر، برنامه ما ابتدا به انتهای فاکتوریل می رسد (که 1 است)، سپس راه خود را ایجاد می کند، در حالی که ضرب می شود. روی هر مرحله
همچنین حذف تابع از پشته تماس یکی یکی، تا نتیجه نهایی n * (n-1)
برگردانده می شود.
به طور کلی توابع بازگشتی به این صورت است. برخی از مسائل پیچیده تر ممکن است به بازگشت های عمیق تر با بیش از یک حالت پایه یا بیش از یک مرحله بازگشتی نیاز داشته باشند. اما در حال حاضر، این بازگشت ساده به اندازه کافی خوب است تا مشکل فاکتوریل ما را حل کند!
نتیجه
در این مقاله به روش محاسبه فاکتوریل با استفاده از آن پرداختیم for
و while
حلقه ها ما همچنین یاد گرفتیم که بازگشت چیست و چگونه فاکتوریل را با استفاده از بازگشت محاسبه کنیم.
اگر از بازگشت لذت برده اید و می خواهید بیشتر تمرین کنید، دنباله فیبوناچی را با بازگشت محاسبه کنید! و اگر سوال یا نظری در مورد مقاله ما دارید، در قسمت نظرات به اشتراک بگذارید.
منتشر شده در 1403-01-15 08:38:03