بازگشت (Recursion)

سابروتین بازگشتی: فاکتوریل، فیبوناچی و مجموع ارقام.

تابعی که خودش را صدا می‌زند

بازگشت (Recursion) یعنی sub برای حل مسئله، خودش را با ورودی کوچک‌تر صدا می‌زند.

دو جزء الزامی

  1. شرط پایه: حالت توقف
  2. گام بازگشتی: فراخوانی با ورودی کوچک‌تر
بدون شرط پایه = بازگشت بی‌نهایت = کرش!

فاکتوریل بازگشتی

sub factorial {
  my $n = shift;
  return 1 if $n <= 1;              { پایه }
  return $n * factorial($n - 1);    { بازگشتی }
}
say factorial(5);      { 120 }

اجرای factorial(4):

factorial(4) = 4 * factorial(3)
             = 4 * 3 * factorial(2)
             = 4 * 3 * 2 * factorial(1)
             = 4 * 3 * 2 * 1 = 24

فیبوناچی بازگشتی

sub fib {
  my $n = shift;
  return $n if $n < 2;              { پایه: fib(0)=0, fib(1)=1 }
  return fib($n-1) + fib($n-2);     { بازگشتی }
}
say join(" ", map { fib($_) } 0..10);   { مفهومی — با حلقه چاپ کنید }

مجموع ارقام بازگشتی

sub digit_sum {
  my $n = shift;
  return $n if $n < 10;             { یک رقم }
  return ($n % 10) + digit_sum(int($n / 10));
}
say digit_sum(4527);    { 18 }

توان بازگشتی

sub power {
  my ($base, $exp) = @_;
  return 1 if $exp == 0;
  return $base * power($base, $exp - 1);
}
say power(2, 10);       { 1024 }

بازگشت در برابر حلقه

ویژگیبازگشتحلقه
خواناییطبیعی برای مسائل بازگشتیبرای شمارش
سرعتسربار فراخوانیبهتر
خطرسرریز پشتهحلقه بی‌نهایت

خلاصه

این مبحث بخشی از دوره آموزش کامل پرل است.

ابزارهای مرتبط