Scala 为什么这个递归函数赢了';行不通

Scala 为什么这个递归函数赢了';行不通,scala,recursion,Scala,Recursion,我有这个函数递归地计算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):双精度={ 如果(n==0)1 否则,如果(n您总是在最后一种情况下调用pow(…,2),并且最后一种情况是唯一处理n=

我有这个函数递归地计算
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):双精度={ 如果(n==0)1
否则,如果(n您总是在最后一种情况下调用
pow(…,2)
,并且最后一种情况是唯一处理
n==2
的情况。因此…

在某一点上使用您的方法,您最终会执行以下操作:

pow(pow(x,1),2) -> pow(x*pow(x,0),2) -> pow(x,2) -> pow(pow(x,1),2) -> ...
这是因为n==2仅由最后一个条件处理,该条件最终会一次又一次地调用自身

pow(pow(x,1),2) -> pow(x*pow(x,0),2) -> pow(x,2) -> pow(pow(x,1),2) -> ...