我有这个函数来递归地计算x
的n
次方:
def pow(x:Double,n:Int):Double={
if (n==0) 1
else if (n<0) 1/pow(x,-n)
else if (n%2 == 1) x*pow(x,n-1)
else pow(pow(x,n/2),2)
}
但这不适用于最后一种情况(即正偶数)。它就卡在那里。 但是,如果我给出这个:
def pow(x:Double,n:Int):Double={
if (n==0) 1
else if (n<0) 1/pow(x,-n)
else if (n%2 == 1) x*pow(x,n-1)
else {val y=pow(x,n/2); y*y}
}
它按预期运行。谁能告诉我第一个实现错误的原因是什么。我正在尝试回答本书第 2 章中的问题 10 Scala For Impressive。
最佳答案
用你的方法在某个时候你最终会做:
pow(pow(x,1),2) -> pow(x*pow(x,0),2) -> pow(x,2) -> pow(pow(x,1),2) -> ...
这是因为 n==2 仅由最后一个条件处理,最终会一遍又一遍地调用自身......
关于scala - 为什么这个递归函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22167478/