複数の数字を交互に計算して、条件に該当する結果を出力する(再帰関数)
計算方法
初期の数字と比較に使う数字が当てられているとき、それらを比較して条件に該当する数字を出力したい。
数字がスペース区切りの文字列で与えられてる場合。
とりあえず、配列にまとめてやる。
比較数字1と2で計算した結果を交互に比較したいので、どうしようかと思ったとき、再帰関数を使用した。
偶数と奇数回で足す数字が異なる。ifの条件がちょっと甘いので、抜けてるものがあると思う。イメージとしては、こんな感じだと思うが。そこは注意してほしい。
条件に該当したら出力して終わりで、該当しないなら、片方の関数に飛ばしてやって同じように計算を繰り返す(再帰関数)。初め引数を上手く渡せてなかった。
再帰関数についての理解が甘いというか、アルゴリズム全般の知識が弱い気がする。
実際のコード
<?php
//インデント揃ってないので注意
$input = fgets(STDIN);
$array = explode(" ",$input);
$arr1 = $array[0];//初期数字
$arr2 = $array[1];//比較数字1
$arr3 = $array[2];//比較数字2
//再帰関数を使ってやる
function gusu($i,$arr2,$arr3){
//偶数回数のときは、1000をプラスする
if($i <= 1000000){//条件
$i2 = $i + 1000;
if($i2 > $arr2 && $i2 < $arr3){
echo "B"." ".$i2;
}elseif($i2 < $arr2 && $i2 < $arr3 && $i2 + 1000 > $arr3){
echo "A"." ".$i2;
}else{
kisu($i2,$arr2,$arr3);
}
}
}
function kisu($i,$arr2,$arr3){
//奇数回数のときは、10をプラスする
if($i <= 1000000){//条件
$ii= $i + 10;
if($ii > $arr2 && $ii < $arr3){
echo "B"." ".$ii;
}elseif($ii < $arr2 && $ii < $arr3 && $ii + 1000 > $arr3){
echo "A"." ".$ii;
}else{
gusu($ii,$arr2,$arr3);
}
}
}
kisu($arr1,$arr2,$arr3);
?>
良い方法があればコメントください。
ディスカッション
コメント一覧
まだ、コメントがありません