Created by
sironekotoro
| use strict;
use warnings;
use feature qw/say/;
# H30 高度情報 午前1 問2
# https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2018h30.html#30haru
# 問2 非負の整数 m, n に対して次のとおりに定義された関数
# Ack (m, n) がある。
# Ack (1, 3) の値はどれか。
# Ack(m,n) = Ack(m-1, Ack(m,n-1) ) (m>0かつn>0のとき )
# Ack(m,n) = Ack(m-1, 1 ) (m>0かつn=0のとき )
# Ack(m,n) = n+1 (m=0のとき )
say Ack( 1, 3 );
sub Ack {
my ( $m, $n ) = @_;
say '-' x 10;
if ( $m > 0 && $n > 0 ) {
say "引数:m:$m,n:$n";
say " m > 0 かつ n > 0";
say '返り値:Ack('. ( $m - 1 ). ', Ack('. $m . ','. ( $n - 1 ) . ') )';
return Ack( $m - 1, Ack( $m, $n - 1 ) );
}
elsif ( $m > 0 && $n == 0 ) {
say "引数:m:$m,n:$n";
say " m > 0 かつ n = 0";
say '返り値:Ack('. ( $m - 1 ). ', 1)';
return Ack( $m - 1, 1 );
}
elsif ( $m == 0 ) {
say "引数:m:$m n:$n";
say " m = 0";
say "返り値:" . ($n + 1);
return $n + 1;
}
say '-' x 10;
}
|