m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

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]$ 

所感

単純なものはこんな感じ、プログラムとしてアルゴリズムを考えたら結構時間がかかる。
普段使用していることは頭に入っている分、やり方は簡単ですけど
知らないことの場合はまず仕組みを理解することから始まるから結構たいへんな感じです。