再帰の限界(コールスタックサイズ)を超えたり超えなかったりする例

let 回数 = 0
// ルーレット: 0-36の数字に賭けて当たれば36倍
function ルーレット(総資金, 賭け金, 数字) {
  if (総資金 < 賭け金 || 総資金 > 10000000) {
    return
  }
  console.log(総資金 + '円', 回数++ + '回目')
  const 当たり番号 = Math.floor(Math.random() * 37)
  if (当たり番号 === 数字) {
    return ルーレット(総資金 + 賭け金 * 36, 賭け金, 数字)
  } else {
    return ルーレット(総資金 - 賭け金, 賭け金, 数字)
  }
}

// 100万円を元手に1000円ずつ、ずっと5に賭ける。
ルーレット(1000000, 1000, 5)
// 破産(正常終了)のときもあれば、途中でエラーのときも。
// RangeError: Maximum call stack size exceeded

// テストで発見できないかもしれない再帰の怖いエラー。