الگوریتمهای کلاسیک
عدد اول، فاکتوریل، جستجو و فیبوناچی — به سبک پرل.
پرل + الگوریتم = لذت!
پرل برای پیادهسازی سریع الگوریتمها فوقالعاده است — کد کوتاه و واضح.
۱. تشخیص عدد اول
sub is_prime {
my $n = shift;
return 0 if $n < 2;
foreach my $i (2..int(sqrt($n))) {
return 0 if $n % $i == 0;
}
return 1;
}
foreach my $x (2..30) {
print "$x " if is_prime($x);
}
print "\n"; { 2 3 5 7 11 13 17 19 23 29 }
۲. ب.م.م (GCD) با اقلیدس
sub gcd {
my ($a, $b) = @_;
while ($b != 0) {
($a, $b) = ($b, $a % $b); { جابجایی پرلی! }
}
return $a;
}
say gcd(48, 36); { 12 }
۳. جستجوی خطی
sub find_index {
my ($target, @arr) = @_;
foreach my $i (0..$#arr) {
return $i if $arr[$i] == $target;
}
return -1; { پیدا نشد }
}
say find_index(23, 5, 12, 23, 8); { 2 }
۴. فیبوناچی با حلقه
sub fib_list {
my ($n) = @_;
my @fib = (0, 1);
while (@fib < $n) {
push @fib, $fib[-1] + $fib[-2]; { دو تا آخر! }
}
return @fib;
}
say join(" ", fib_list(10)); { 0 1 1 2 3 5 8 13 21 34 }
$fib[-1] و $fib[-2] آخرین و یکیماندهبهآخرین عنصر — ایندکس منفی پرل!
۵. عدد آرمسترانگ
sub is_armstrong {
my $n = shift;
my $sum = 0;
my $m = $n;
while ($m > 0) {
my $d = $m % 10;
$sum += $d ** 3;
$m = int($m / 10);
}
return $sum == $n;
}
say is_armstrong(153) ? "بله" : "نه"; { بله: 1³+5³+3³=153 }
۶. برعکس کردن عدد
sub reverse_num {
my $n = shift;
my $rev = 0;
while ($n > 0) {
$rev = $rev * 10 + ($n % 10);
$n = int($n / 10);
}
return $rev;
}
say reverse_num(4527); { 7254 }
خلاصه
- اول بودن: تقسیم تا √n
- GCD: اقلیدس با جابجایی پرلی
- $arr[-1] آخرین عنصر — الگوریتمها را کوتاه میکند
این مبحث بخشی از دوره آموزش کامل پرل است.