آموزش کامل توابع بازگشتی در جاوا (به زبان ساده)
در این آموزش یاد می گیرید که تابع بازگشتی ایجاد کنید. تابعی که خودش را صدا می کند. همچنین با مزایا و معایب آن آشنا می شوید.
متدی که خود را فراخوانی می کند به عنوان متد بازگشتی شناخته می شود. این متد به عنوان تابع بازگشتی شناخته می شود.
یک مثال از دنیای فیزیکی ، قرار دادن دو آینه موازی در کنار یکدیگر است. هر چیزی که بین آن ها باشد به صورت بازگشتی منعکس می شود.
تابع بازگشتی چگونه کار می کند؟
برنامه بالا ، ابتدا تابع ()recurse از داخل تابع main (فراخوانی روش عادی) صدا زده می شود.
همچنین ، تابع ()recurse از داخل با همان تابع ()recurse فراخوانی می شود. این یک تابع بازگشتی است.
تابع بازگشتی به حالت عادی ادامه می یابد تا برخی از شرط ها برای جلوگیری از اجرای آن رخ دهد. اگر اینطور نباشد ، بازگشت بی نهایت رخ می دهد.
از این رو ، برای جلوگیری از ایجاد تابع بازگشتی نامحدود ، با دستور if … else (یا روش مشابه) در قسمتی از کد اتمام تابع بازگشتی را می نویسیم.
جاوا، جاوا اسکریپت رو قورت بده! بدون کلاس، سرعت 2 برابر، ماندگاری 3 برابر، پولسازی عالی با توسعه وب، ماشین لرنینگ و ... کتابخانه های پیشرفته جاوا اسکریپت و ... دانلود:
مثال: فاکتوریل یک عدد با استفاده از تابع بازگشتی
- class Factorial {
- static int factorial( int n ) {
- if (n != 0)
- return n * factorial(n-1); // recursive call
- else
- return 1;
- }
- public static void main(String[] args) {
- int number = 4, result;
- result = factorial(number);
- System.out.println(number + ” factorial = ” + result);
- }
- }
خروجی
۴ factorial = 24
در ابتدا ، ()factorial از تابع ()main با عدد ارسال شده به عنوان آرگومان فراخوانی می شود.
در داخل تابع ()factorial ، مقدار n در ابتدا ۴ است. در طی فراخوانی بازگشتی بعدی ، ۳ به تابع ()factorial ارسال می شود. این روند تا زمانی که n برابر با ۰ نباشد ادامه می یابد.
اگر n برابر با ۰ باشد ، شرط if اجرا نمی شود و قسمت else اجرا می شود که ۱ را بر می گرداند، و result به تابع ()main ارسال می شود.
شکل زیر ایده بهتری در مورد چگونگی عملکرد برنامه فوق ارائه می دهد.
مزایا و معایب تابع بازگشتی
هنگامی که تابع بازگشتی فراخوانی می شود ، مکان جدیدی برای ذخیره متغیرها در پشته اختصاص می یابد. در هر فراخوانی بازگشتی ، متغیرها و پارامترهای قدیمی از پشته حذف می شوند. از این رو ، تابع بازگشتی به طور کلی از حافظه بیشتری استفاده می کند و در کل کند است.
از طرف دیگر ، راه حل بازگشتی بسیار ساده تر است و زمان کمتری برای نوشتن ، اشکال زدایی و نگهداری می برد.