بازگشت (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 را نشان می دهد.

recursion-12-13-10-01
کد بالا را به وسیله یک حلقه for نیز می توان نوشت :

  1: <?php
  2: 	$factorial = 1;
  3: 
  4: 	for ( $counter = 5; $counter >= 1; $counter-- )
  5: 	   $factorial *= $counter;
  6: 	   
  7: 	echo $factorial; 
  8: ?>
120

این کد از کد معادل بازگشتی آن آسان تر است. از بازگشت در زمینه های خاصی در علوم کامپیوتر استفاده می شود. استفاده از بازگشت حافظه زیادی اشغال می کند پس اگر سرعت برای شما مهم است از آن استفاده نکنید.

لطفا اگر نظر، پیشنهاد و یا انتقادی در باره مطلب بالا دارید در قسمت زیر مطرح بفرمایید.