《快学scala》第二章最后一个题是用特定的递归进行计算,但是自己被自己坑了。

记录一下。

写函数计算xn,其中n是整数,使用如下的递归定义:
xn=y2,如果n是正偶数的话,这里的y=x(n/2)
xn = x*x(n-1),如果n是正奇数的话
x0 = 1
xn = 1/x(-n),如果n是负数的话
不得使用return语句

 


println(XN(2, -1))
    def XN(x: Double, n: Int): Double = {
        if (n > 0 && n % 2 == 0) XN(XN(x, n / 2), 2)
        else if (n > 0 && n % 2 == 1) x * XN(x, n - 1)
        else if (n == 0) 1
        else 1/XN(x, -n)
        // else XN(XN(x, -n), -1)
        //这里注意不能 用 else XN(XN(x, -n), -1)
        // 如果一直递归 就变成死递归了。。
    }