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);
    }
}