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);
}
}
这就是我到目前为止所做的。我认为这是正确的,但我不断得到堆栈溢出错误,并记住。它必须是递归的!请给我完整的答案。
发布于 2018-10-24 10:03:16
private static int powerNum(int n, int x) {
if(x == 0) {
return 1;
}
else {
return n* powerNum(n, x-1);
}
}
我想这个街区就是你要找的地方吧?
发布于 2018-10-24 08:12:01
您没有将i
传递给下一个函数调用,并且始终将i
初始化为1
,因此条件if(x>i)
始终为真,前提是x
不止一个。在if
中,您有一个递归调用:
if(x>i){
i++;
powerNum(n,x,t);
}
这会导致无限递归。此外,您永远不要更改或使用n
、x
或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
作为结果传递:
public static void powerNum(int base, int power) {
powerNum(base, power, 1);
}
https://stackoverflow.com/questions/52959392
复制相似问题