22035プログラマースコラーツの推測


12943題

私は隊員が解いた謎を解くことができなかった.
function solution(num) {
  for (i = 0; i < 500; i++){
    if (num == 1) {
      return i
    } else {
      if (num % 2 == 0) {
        num = num/2
      } else {
        num = num*3+1
      }
    }
  }
  return -1
}
  • 繰り返し500回
  • 条件文numを1にした場合
  • i戻り回数
  • 1でない場合は、条件文
  • を使用します.
  • numを2で割った場合、残りが0であれば偶数
  • numを2で割る
  • そうでない場合numに3プラス1
  • を乗じる
  • 最後の500回が1ではなく終了した場合は、-1
  • を返します.
    サスペンス
    Q)numという変数が与えられているはずなのに、numを演算する数字が再割り当てされるのはなぜですか?
    答弁する
    A)初期numが与えられると、0 xABというメモリに格納される.
    その後計算された他の値のnumはメモリに格納されます.
    だからfor文のnum値はずっと変化しています
    =>Call by Referenceコンセプトの検索