توابع بازگشتی (Recursive Functions) - آزمون آنلاین جاوا اسکریپت
به دنیای جذاب و گاهی اوقات گیجکننده توابع بازگشتی در جاوااسکریپت خوش اومدی. این یک آزمون در مورد این مفهوم مهم و کاربردیه که قراره بهت کمک کنه تا درک بهتری ازش پیدا کنی. اگه دوست داری بدونی توابع بازگشتی چطور کار میکنن، کجا به دردت میخورن و چطور باید باهاشون کنار بیای، این آزمون رو از دست نده.

به زبان ساده، یک تابع بازگشتی، تابعیه که خودش رو دوباره صدا میزنه. درست مثل اینکه جلوی دو تا آینه موازی وایستی و تصویرت رو بینهایت بار ببینی. اما بر خلاف اون، توی برنامهنویسی باید یک شرط توقف داشته باشیم، وگرنه تابع تا ابد به کارش ادامه میده و برنامه رو قفل میکنه. به این شرط، حالت پایه (Base Case) میگن.
چرا از توابع بازگشتی استفاده میکنیم؟
شاید اولش فکر کنی که خب چرا وقتی میتونم از حلقهها مثل for یا while استفاده کنم، برم سراغ توابع بازگشتی؟ جواب اینه که گاهی اوقات، راهحلهای بازگشتی کد رو خیلی تمیزتر و سادهتر میکنن، به خصوص وقتی با ساختارهای دادهای مثل درختها یا گرافها سر و کار داریم.
توابع بازگشتی بیشتر توی این زمینهها به کار میان:
- پیمایش درخت (Tree Traversal): برای پیدا کردن یا پردازش گرهها توی ساختار درختی.
- الگوریتمهای جستجو (Search Algorithms): مثل جستجوی عمقی (Depth-First Search) که توی گرافها استفاده میشه.
- الگوریتمهای مرتبسازی (Sorting Algorithms): مثل Quicksort و Mergesort که مسئله رو به زیرمسئلههای کوچکتر تقسیم میکنن.
نمونههایی از توابع بازگشتی
یکی از مثالهای کلاسیک برای توابع بازگشتی، محاسبه فاکتوریل یک عدده. فاکتوریل عدد 5 یعنی 5 ضربدر 4 ضربدر 3 ضربدر 2 ضربدر 1. اینجا میتونیم ببینیم که چطور تابع خودش رو برای محاسبه فاکتوریل عدد کوچکتر صدا میزنه.
function factorial(n) {
if (n === 0) {
return 1; // حالت پایه
} else {
return n * factorial(n - 1); // فراخوانی بازگشتی
}
}
console.log(factorial(5)); // خروجی: 120
مثال دیگه، تابع countdown برای شمارش معکوسه.
function countdown(n) {
if (n < 0) {
return; // حالت پایه
}
console.log(n);
countdown(n - 1); // فراخوانی بازگشتی
}
countdown(3);
خروجی این کد به ترتیب اعداد 3، 2، 1 و 0 رو در کنسول نشون میده.
جدول مقایسه: توابع بازگشتی در برابر حلقهها
برای اینکه بهتر با تفاوتهای این دو روش آشنا بشی، این جدول رو برات آماده کردم:
| ویژگی | توابع بازگشتی | حلقهها (Loops) |
|---|---|---|
| خوانایی کد | معمولاً برای مسائل پیچیده و ساختارهای درختی خواناتر است. | برای مسائل سادهتر و تکرارهای مشخص، خواناتر است. |
| مصرف حافظه | به خاطر استفاده از Call Stack، حافظه بیشتری مصرف میکند. | حافظه کمتری مصرف میکند. |
| پیچیدگی | برای مبتدیها ممکنه پیچیده به نظر بیاد. | یادگیری و درک آن سادهتر است. |
سوالات این آزمون چه چیزهایی رو بررسی میکنن؟
با شرکت در این کوییز میتونی میزان مهارت و تسلط خودت رو درباره توابع بازگشتی در جاوااسکریپت بسنجی و همزمان اطلاعات خوبی در مورد این موضوع به دست بیاری. سوالات این آزمون در مورد توابع بازگشتی هستن و بخشهای مختلفی رو پوشش میدن.
مثلاً یک سوال ممکنه ازت بپرسه حالت پایه (Base Case) در یک تابع بازگشتی چیست یا یک سوال دیگه ممکنه یک قطعه کد بهت بده و بگه خروجی اون چیه.
با شرکت توی این آزمون، به یه درک عمیقتر از این مبحث میرسی، میفهمی که چطور میتونی مشکلات رو با رویکرد بازگشتی حل کنی و در نهایت، مهارتهای جاوااسکریپت خودت رو یک پله ارتقا میدی.
خب، برای شروع آمادهای؟
بیا و دانش خودت رو بسنج!