بازگشت: مفاهیم، مؤلفه ها و برنامه های کاربردی – جاوا

این مقاله مفهوم بازگشت در برنامه نویسی را توضیح می دهد. اجزای اصلی خود را شرح می دهد: حالت پایه و حالت بازگشتی. با استفاده از یک مثال جاوا، نحوه پیاده سازی بازگشت را نشان می دهد و بر حفاظتی برای جلوگیری از حلقه های بی نهایت و خطاهای سرریز پشته تاکید می کند.
در علوم کامپیوتر، درک مفهوم بازگشتی ضروری است، زیرا اغلب پایه الگوریتمهای پیچیدهتر است، و در برنامهنویسی، ابزاری است که برای حل مسائل از طریق تجزیه آنها به زیرمسائل کوچکتر و قابل مدیریتتر استفاده میشود. این پست اجزای یک روش بازگشتی – حروف پایه و حروف بازگشتی – را با استفاده از زبان برنامه نویسی جاوا بررسی می کند.
توضیح روش بازگشتی
یک الگوریتم یا روش بازگشتی، مسائل پیچیده را با فراخوانی خود و با تقسیم کردن مسائل به زیرمسائل کوچکتر و قابل مدیریتتر حل میکند.
اجزای اصلی برای ایجاد یک متد بازگشتی عبارتند از یک مورد پایه و یک مورد بازگشتی.
- یک کیس پایه شرطی است که وقتی برآورده شد، بازگشت را متوقف می کند، معمولاً در یک دستور if.
- یک مورد بازگشتی مجموعهای از خطوط کد یا قابلیتهایی است که «اگر» شرط موردی پایه برآورده نشود، محاسبه میشوند و همیشه با روش بازگشتی دنبال میشود که معمولاً با یک ورودی اصلاحشده خود را فراخوانی میکند. به طور معمول، خطوط کد و فراخوان بازگشتی در یک عبارت 'else' به دنبال عبارت 'if' یافت می شوند و بررسی می کنند که آیا شرط پایه برآورده شده است یا خیر. با این حال، اگر عبارت «if» حاوی عبارت «بازگشت» باشد، خطوط کد و فراخوانی بازگشتی درست بعد از عبارت «if» پیدا میشوند.
توجه داشته باشید که یک روش بازگشتی که خود را با یک ورودی اصلاح نشده فراخوانی میکند، یا یک روش بازگشتی که ورودی دریافت نمیکند، یک حلقه بازگشتی بینهایت ایجاد نمیکند، اگر و فقط در صورتی که شرط اصلی مبتنی بر عوامل خارجی باشد که مستقل از روش تغییر میکنند. ورودی
برای جلوگیری از ایجاد یک روش بینهایت بازگشتی، این روش باید حداقل یک مورد پایه داشته باشد که در نهایت به آن میرسد. توجه داشته باشید که یک روش بازگشتی می تواند بیش از یک حالت پایه داشته باشد. به عنوان مثال، روش بازگشتی می تواند شامل یک مورد پایه باشد که یک شرایط خاص را بررسی می کند و دیگران می توانند به عنوان محافظ عمل کنند. اگر هرگز به اولین شرط مورد پایه نرسید، حفاظتی مانند شمارنده میتواند تعداد بازگشتها را بر اساس حافظه محاسباتی موجود محدود کند و از خطای سرریز پشته جلوگیری کند.
در یک نکته جانبی: زبان برنامه نویسی پایتون دارای مکانیزم داخلی است که تعداد بازگشت هایی را که یک برنامه می تواند انجام دهد محدود می کند. در صورت نیاز، این محدودیت را می توان با استفاده از کتابخانه سیستم پایتون (sys) تغییر داد، یا کاهش یا افزایش داد.
در اینجا نمونه ای از روش بازگشتی آورده شده است:
import java.util.Random;
public class AreWeThereYet {
private static final Random randomGenerateMiles = new Random();
public static void askAreWeThereYet(int totalMilesDriven, int tripTotalMiles) {
// ---- Base case ---- We've arrived!
if (totalMilesDriven >= tripTotalMiles) {
System.out.println("We're here! Finally!");
return;
}
// ---- Recursive case ----
// Miles driven
int milesDriven = randomGenerateMiles.nextInt(50) + 1; // Drive 1-50 miles
// Keep asking and driving
System.out.println("Are we there yet?");
System.out.println("Not yet, we've traveled " + totalMilesDriven + "miles.");
if (milesDriven + totalMilesDriven >= tripTotalMiles) {
milesDriven = tripTotalMiles - totalMilesDriven;
}
System.out.println("--- Drives " + milesDriven + " miles ---");
totalMilesDriven += milesDriven;
// ---- Recursive call ----
askAreWeThereYet(totalMilesDriven, tripTotalMiles);
}
public static void main(String[] args) {
int tripTotalMiles = 100; // Total trip distance
System.out.println("Trip total miles: " + tripTotalMiles);
askAreWeThereYet(0, tripTotalMiles);
}
}
خروجی
Trip total miles: 100
Are we there yet?
Not yet, we've traveled 0 miles.
--- Drives 10 miles ---
Are we there yet?
Not yet, we've traveled 10 miles.
--- Drives 26 miles ---
Are we there yet?
Not yet, we've traveled 36 miles.
--- Drives 17 miles ---
Are we there yet?
Not yet, we've traveled 53 miles.
--- Drives 12 miles ---
Are we there yet?
Not yet, we've traveled 65 miles.
--- Drives 23 miles ---
Are we there yet?
Not yet, we've traveled 88 miles.
--- Drives 12 miles ---
We're here! Finally!
به طور خلاصه، بازگشت یک رویکرد زیبا و قدرتمند برای حل مسائل پیچیده است. با تعریف یک مورد پایه و یک مورد بازگشتی، توسعه دهندگان می توانند الگوریتم هایی ایجاد کنند که به طور موثر پیچیدگی مسئله را مدیریت می کند. با این حال، مهم است که اطمینان حاصل شود که بازگشت به طور مناسب متوقف می شود تا از حلقه های بی نهایت یا خطاهای سرریز پشته جلوگیری شود. مثال ارائه شده جاوا، “AreWeThereYet”، این اصول را در عمل نشان می دهد، و نشان می دهد که چگونه می توان از بازگشت به صورت پویا برای حل یک مشکل و در عین حال شفافیت و عملکرد استفاده کرد. همانطور که ما به کشف تکنیک های برنامه نویسی ادامه می دهیم، بازگشت به عنوان یک مهارت ارزشمند باقی می ماند که بر اهمیت تجزیه سنجیده مسئله و طراحی روش تاکید می کند.
در ابتدا در Alex.omegapy در Medium توسط Level UP Coding در 8 نوامبر 2024 منتشر شد.