بازگشت (Recursion)
بازگشت فرایندی است که در آن متد مدام خود را فراخوانی میکند تا زمانی که به یک مقدار مورد نظر برسد. بازگشت یک مبحث پیچیده در برنامه نویسی است و تسط به آن کار را حتی نیست. به این نکته هم توجه کنید که بازگشت باید در یک نقطه متوقف شود وگرنه برای بی نهایت بار، متد، خود را فراخوانی میکند. در این درس یک مثال ساده از بازگشت را برای شما توضیح میدهیم. فاکتوریل یک عدد صحیح مثبت (n!) شامل حاصل ضرب همه اعداد مثبت صحیح کوچکتر یا مساوی آن میباشد. به فاکتوریل عدد 5 توجه کنید.
5! = 5 * 4 * 3 * 2 * 1 = 120
برای ساخت یک متد بازگشتی، باید به فکر توقف آن هم باشیم. بر اساس توضیح بازگشت، فاکتوریل فقط برای اعداد مثبت صحیح است. کوچکترین عدد صحیح مثبت 1 است. در نتیجه از این مقدار برای متوقف کردن بازگشت استفاده میکنیم.
1: <?php 2: function Factorial($number) 3: { 4: if ($number == 1) 5: return 1; 6: 7: return $number * Factorial($number - 1); 8: } 9: 10: echo Factorial(5); 11: ?>
120
متد مقدار بزرگی را بر میگرداند، چون محاسبه فاکتوریل میتواند خیلی بزرگ باشد. متد یک آرگومان که یک عدد است و میتواند در محاسبه مورد استفاده قرار گیرد را میپذیرد. در داخل متد یک دستور if مینویسیم و در خط 4 می گوییم که اگر آرگومان ارسال شده برابر 1 باشد سپس مقدار 1 را برگردان در غیر اینصورت به خط بعد برو. این شرط باعث توقف تکرارها نیز میشود.
در خط 7 مقدار جاری متغیر number در عددی یک واحد کمتر از خودش (number – 1) ضرب میشود. در این خط متد Factorial خود را فراخوانی میکند و آرگومان آن در این خط همان number – 1 است. مثلاً اگر مقدار جاری number عدد 10 باشد یعنی اگر ما بخواهیم فاکتوریل عدد 10 را به دست بیاوریم آرگومان متد Factorial در اولین ضرب 9 خواهد بود. فرایند ضرب تا زمانی ادامه مییابد که آرگومان ارسال شده با عدد 1 برابر نشود. شکل زیر فاکتوریل عدد 5 را نشان میدهد.
کد بالا را به وسیله یک حلقه for نیز میتوان نوشت :
1: <?php 2: $factorial = 1; 3: 4: for ( $counter = 5; $counter >= 1; $counter-- ) 5: $factorial *= $counter; 6: 7: echo $factorial; 8: ?>
120
این کد از کد معادل بازگشتی آن آسانتر است. از بازگشت در زمینههای خاصی در علوم کامپیوتر استفاده میشود. استفاده از بازگشت حافظه زیادی اشغال میکند پس اگر سرعت برای شما مهم است از آن استفاده نکنید.