为什么这个递归函数不起作用

时间:2014-03-04 09:15:50

标签: 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):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}
}

按预期运行。谁能告诉我是什么让第一个实现错误。我试图回答“ Scala For Impatient ”一书第2章中的问题10。

2 个答案:

答案 0 :(得分:3)

在某些时候你的方法最终会做:

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

这是因为n == 2仅由最后一个条件处理,最后一次又一次地调用自己......

答案 1 :(得分:2)

你总是在最后一种情况下调用pow(...,2),最后一种情况是唯一一个处理n==2的情况。所以....