我有一个递归函数,用于相乘两个数字,非常简单。
def mul(n: Int, m: Int):Int =
if(m > 1) n + mul(n, dec(m))
else n
现在我正在尝试将其转换为尾递归函数,我尝试了以下代码:
def mulWithTail(n: Int, m: Int):Int = {
@tailrec
def iter(result: Int, x: Int):Int =
if(x == 0) result
else result + iter(result, dec(x))
iter(n, m)
}
然而,我遇到了以下错误:
错误:无法优化使用@tailrec注释的iter方法:它包含一个不在尾部位置的递归调用
else result + iter(result, dec(x))
问题:您能为我解释一下为什么会出现这个错误吗?我应该如何重构我的代码?