Java 给定base和n都是1或更多,递归(无循环)计算base到n次方的值,因此powerN(3,2)是9(3的平方)。在爪哇
这就是我到目前为止所做的。我认为这是正确的,但我一直得到堆栈溢出错误,并记住。它必须是递归的!!!请给出完整答案。您没有将Java 给定base和n都是1或更多,递归(无循环)计算base到n次方的值,因此powerN(3,2)是9(3的平方)。在爪哇,java,Java,这就是我到目前为止所做的。我认为这是正确的,但我一直得到堆栈溢出错误,并记住。它必须是递归的!!!请给出完整答案。您没有将i传递给下一个函数调用,并且您总是将i初始化为1,因此如果(x>i)始终为真,前提是x不止一个。在if中,您有一个递归调用: public static void powerNum(int n,int x,int t) { int i = 1; if(x>i){ i++; powerNum(n,x,t);
i
传递给下一个函数调用,并且您总是将i
初始化为1
,因此如果(x>i)始终为真,前提是x
不止一个。在if
中,您有一个递归调用:
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);
}
}
这将导致无限递归。此外,您从不更改或使用n
、x
或t
的值
以下是一些psuedocode以帮助您:
if(x>i){
i++;
powerNum(n,x,t);
}
唯一的一点是,result
总是需要作为一个传递,这相当不方便。您可以创建一个重载函数,只接受base和power,然后调用原始的powerNum
函数,传递1
,结果如下:
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
我想这个块就是你要找的吗?提示:
x**y=x*(x**(y-1))
和x**1=x
甚至使用n
或t
公共静态void powerNum(int n,int x,int t,int I){if(n>I++;x=x*t;powerNum(n,x,t,I);}否则{System.out.println(n);}它不会给我2个9@helpme如果功率小于1-这如何等同于if(n>i)
?power-1
@helpme在哪里?您不需要传递四个参数。此外,您还混淆了哪些变量代表什么。我建议使用比x
、n
和t
更具描述性的变量名,它不是这样打印的System.out.println(powerNum(2,3))
?
public static void powerNum(int base, int power) {
powerNum(base, power, 1);
}
private static int powerNum(int n, int x) {
if(x == 0) {
return 1;
}
else {
return n* powerNum(n, x-1);
}
}