複数の数字を交互に計算して、条件に該当する結果を出力する(再帰関数)

https://himaise.com/php/

計算方法

初期の数字と比較に使う数字が当てられているとき、それらを比較して条件に該当する数字を出力したい。
数字がスペース区切りの文字列で与えられてる場合。
とりあえず、配列にまとめてやる。
比較数字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); 

?>

良い方法があればコメントください。

php, programming

Posted by himajinn