بازگشت (Recursion)
سابروتین بازگشتی: فاکتوریل، فیبوناچی و مجموع ارقام.
تابعی که خودش را صدا میزند
بازگشت (Recursion) یعنی sub برای حل مسئله، خودش را با ورودی کوچکتر صدا میزند.
دو جزء الزامی
- شرط پایه: حالت توقف
- گام بازگشتی: فراخوانی با ورودی کوچکتر
بدون شرط پایه = بازگشت بینهایت = کرش!
فاکتوریل بازگشتی
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 }
بازگشت در برابر حلقه
| ویژگی | بازگشت | حلقه |
|---|---|---|
| خوانایی | طبیعی برای مسائل بازگشتی | برای شمارش |
| سرعت | سربار فراخوانی | بهتر |
| خطر | سرریز پشته | حلقه بینهایت |
خلاصه
- شرط پایه الزامی!
- گام بازگشتی به سمت پایه
- فاکتوریل و فیبوناچی = تمرین کلاسیک
این مبحث بخشی از دوره آموزش کامل پرل است.