
بنام زبان آفرین
بعد پنج شیش ماه هوس کردم بیام ویرگول یچی بنویسم اونم درست زمانی که سه تا پروژه سنگین دست گرفتم و کار هام مونده ، گفتم چی بنویسم که هم کاربردی باشه هم کوتاه ، رسیدم به موضوع الگوریتم های ریکرسیو که دیشب یه مقاله جوندار در موردش خوندم ، با خودم گفتم بدی نیس ، هم واسه خودم مرور میشه هم یه چیزی نوشتم .
توی یه جمله بخوام کلیت الگوریتم های ریکرسیو رو بگم اینه که این مدل الگوریتم ها قابلیت اینو دارن که در بخش هایی از پراسسشون بتونن خودشون رو مجددا و با یه حجم ورودی معولا کمتر ، کال کنن
یه نمونه ساده و دم دستی این الگوریتم ها ، الگوریتم محاسبه فاکتوریل هستش کد فانکشنش رو داخل جاوا مینویسم براتون :
public int fact (int x){ if(x == 1) return 1; return x * fact( x - 1 ); }
خب همونطور که میبینید اینجا یه کد خیلی جمع و جور داریم که بطور بازگشتی اونقدر خودش رو کال میکنه که به حالت بیس که همون 1 هست برسه و چرخه فراخوانی بسته بشه ، توی بیان الگوریتم های بازگشتی مشخص کردن نقطه پایان الگوریتم اهمیت خیلی بالایی داره ، که اگه تعریف نشه بلاتردید دچار stack over flow خواهیم شد و پراسس بووم!
الگوریتم های بازگشتی درسته خیلی جمع و جور و تر و تمیز هستن ولی از اونجایی که مغز ما فرایند ها رو بطور خطی تحلیل و پردازش میکنه ، معمولا کسی سراغ این مدل الگوریتم نمیره ، علاوه بر تنبلی ما یه دلیل قابل قبول برای این مورد هستش که سراغ این مدل الگوریتم نریم و اونم احتمال بالای وقوع stack over flow هستش ، شما حتی توی مواقعی که الگوریتم رو کاملا درست و بی نقص پیاده کرده باشی هم احتمال سرریز رو بخاطر ذات ریکرسیو الگوریتم داری .
یه مدل الگوریتم بازگشتی دیگه هم هستش که بهش میگیم الگوریتم بازگشتی چند گانه که بخوام ساده بگم ، این داداشمون هر دفعه خودش رو چندبار کال میکنه و به مراتب هم طراحیش شخمی تر و سخت تر از اولیه😂
یکی از معروف ترین مثال های این الگوریتم هم ، یه الگوریتم سورتینگ هستش که کد اون رو هم براتون این زیر کپی پیست میکنم ( با عرض پوزش ) :
private int partition ( int arr[] , int low , int high) { int pivot = arr[high]; int i = (low - 1); for (int j = low; j <= high - 1; j++) { if (arr[j] <= pivot){ i++; swap(arr[i], arr[j]);} } swap(arr[i + 1], arr[high]); return (i + 1);
و در نهایت این که اگه نمیخواید ارشد بدید یا امتحانشو ندارید ، بیخیال ایشون بشید که عملا کابرد چندانی نداره :)
9 اردیبهشت ماه 1404 - خوابگاه دستغیب شیراز