テール再帰に関する質問があります。私が知っているように、テール再帰は、関数からの最後の再帰呼び出しが関数の結果を提供するときです。しかし、私はこのような関数を持っていますテール再帰 - スカラ(その他の言語)
def func1(n: Int): Int = {
if (n > 100) {
n - 10
}
else {
func1(func1(n + 11))
}
}
テール再帰ですか?たとえば、
func1(100) = func1(func1(111)) = func1(101) = 91
したがって、最後の再帰呼び出しはfunc1(101)になり、末尾再帰が正しくなるように結果を出力する必要がありますか?私は少し混乱しています。ありがとうございました!
ありがとう!なぜ6行目のfunc1が末尾にないのですか?関数が再び呼び出された場合、それも末尾にあり、7行目のような別の関数を呼び出すべきではありませんか? – user7959714
このコードはtail-recursiveではありません。 'val f = func1(n + 11)' - ここでは、コールスタックの深いところへ行く。 – simpadjo
ああ、なぜそうでないのか分かります。それが完了して値を返すので、fuctionは入力としてその値として再び呼び出さなければなりません。君たちありがとう! – user7959714