perlの学習(再帰方法)
再帰処理?
なんか自身の関数を呼び出す処理。これがあるコードはデータの流れを理解するのに時間がかかる。
実際、苦手。
簡単なやつ
sample1.pl
#/usr/bin/env perl use strict; use warnings; func(10); sub func{ my ($a) = @_; printf("%04d\n", $a); if($a > 1){ func($a -1); } }
↓
[vagrant@localhost perl]$ perl sample1.pl 0010 0009 0008 0007 0006 0005 0004 0003 0002 0001 [vagrant@localhost perl]$
※シンプルな指定値から繰り返して最小値になったら終わるやつ
階乗
sample2.pl
#/usr/bin/env perl use strict; use warnings; my $b = func2(5); print $b . "\n"; sub func2{ my ($a) = @_; if($a > 1){ return $a * func2($a -1); }else{ return 1; } }
↓
[vagrant@localhost perl]$ perl sample2.pl 120 [vagrant@localhost perl]$
累乗?なんか 2 ^ 3 → 2 * 2 * 2みたいなやつ
#/usr/bin/env perl use strict; use warnings; my $b = func3(2, 8); print $b . "\n"; sub func3{ my ($a, $b) = @_; if($b > 1){ return $a * func3($a, $b - 1) }else{ return $a; } }
↓
[vagrant@localhost perl]$ perl sample3.pl 256 [vagrant@localhost perl]$
所感
単純なものはこんな感じ、プログラムとしてアルゴリズムを考えたら結構時間がかかる。
普段使用していることは頭に入っている分、やり方は簡単ですけど
知らないことの場合はまず仕組みを理解することから始まるから結構たいへんな感じです。