【发布时间】:2018-03-08 12:32:15
【问题描述】:
所以我有这个递归函数,可以将两个数字相乘,很简单。
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))
问题:你能解释一下为什么会出现这个错误吗?我应该如何重构我的代码?
【问题讨论】:
-
dec() 只是顺便减一