给定base和n均为1或更大,则递归(无循环)将base的值计算为n次幂,因此powerN(3,2)为9(3平方)。在java中

时间:2018-10-24 00:10:31

标签: java

public static void powerNum(int n,int x,int t) {
    int i = 1;
    if(x>i){
       i++;         
       powerNum(n,x,t);
    }
    else{ 
       System.out.println(n); 
    }
}   

这是我到目前为止所做的。我认为它是正确的,但我不断收到堆栈溢出错误,并记住。它必须是递归的!请提供完整的答案。

2 个答案:

答案 0 :(得分:2)

您没有将i传递给下一个函数调用,并且始终将i初始化为1,因此条件if(x>i)始终为true,前提是{{1} }不止一个。在x中,您有一个递归调用:

if

这将导致无限递归。同样,您永远不会更改或使用if(x>i){ i++; powerNum(n,x,t); } nx的值。

以下是一些伪代码可以帮助您:

t

唯一的问题是accept three parameters: base, power, and result if the power less than one print the result else multiply the result by the base recursive call passing base, power-1, and result 始终需要作为一个整体传递,这非常不方便。您可以创建一个仅接受基数和幂的重载函数,然后调用原始的result函数,并传递powerNum作为结果:

1

答案 1 :(得分:0)

private static int powerNum(int n, int x) {
    if(x == 0) {
        return 1;
    }
    else {
        return n* powerNum(n, x-1);
    }
}

我认为您正在寻找这个街区?