私はこの簡単な計算をしたいが、スタックの深さがそれほど深くないと言うと、n
のように4である。ここでは適用できません。なぜなら、ベースケースに達したときに累積された値だけを加算するからです。スタックレベルが深すぎる(SystemStackError)
RubyVM::InstructionSequence.compile_option = {
:tailcall_optimization => true,
:trace_instruction => false
}
def recursively_count_paths(x , y, n)
if x == n && y == n
return 1
puts " we got a path people"
elif x == n
puts "x is done"
return recursively_count_paths(x, y + 1, n)
elif y == n
puts "y is done"
return recursively_count_paths(x + 1, y, n)
else
return (recursively_count_paths(x + 1, y, n) +
recursively_count_paths(x, y + 1, n))
end
end
recursively_count_paths(0, 0, 20)
私は他の場合に戻ることはありませんか?
'puts'は最初の' if'条件では決して実行されません – Ruslan
@Ruslan true。それは質問に直角である。 – Thalatta
elifではなくelsifですか?私はRubyVM上でこれを実行していないので、これは違いを確認していません –