4
public static int exponent(int baseNum) {
    int temp = baseNum *= baseNum;                

        return temp * exponent(baseNum);             
}

现在,如果我调试上面的方法,它会将 n * n 变为无穷大,所以它仍然有效,但我需要这个递归方法在 10 次后停止,因为我的导师要求我们找到给定 10 的幂的指数。

该方法必须只有一个参数,这里有一些调用指数的例子:

                System.out.println ("The power of 10 in " + n + " is " + 
                    exponent(n));

所以输出应该是:

The power of 10 in 2 is 1024

或者

The power of 10 in 5 is 9765625
4

6 回答 6

4

做类似的事情

public static int exp(int pow, int num) {
    if (pow < 1) 
        return 1; 
    else
        return num * exp(pow-1, num) ;
}

public static void main (String [] args) {     
    System.out.println (exp (10, 5));
}

并且不要忘记告诉何时停止递归并从堆栈中弹出值的基本情况(即条件)。

于 2012-11-01T17:32:37.787 回答
1

创建一个辅助方法来执行递归。它应该有两个参数:底数和指数。以指数 10 的值调用它,并使用 (exponent-1) 进行递归。基本情况是exponent == 0,在这种情况下它应该返回 1。(您也可以exponent == 1用作基本情况,在这种情况下它应该返回基数。)

于 2012-11-01T17:27:58.377 回答
1

以下是我的导师 Penn Wu 教授在讲义中提供的内容。

公共类 Exp 
{
public static int exponent(int a, int n)
{
if (n==0) { return 1; } // base
else // 递归
{
a *= exponent(a, n-1);
返回一个;
}
}
public static void main(String[] args)
{
System.out.print(exponent(2, 10));
}
}
于 2015-09-13T17:51:49.253 回答
0

它不应该有 2 个参数并像下面那样处理退出条件吗?

public static int exponent(int baseNum, int power) {
   if(power == 0){
      return 1;
   }else{ 
      return baseNum * exponent(baseNum, power-1);  
   }           
}
于 2012-11-01T17:28:22.733 回答
0

对于递归函数,我们需要:

  1. 检查停止条件(即当 exp 为 0 时,返回 1)
  2. 用调整后的条件调用自己(即 base * base^(n-1) )

这是代码。

public class Test
{
    public static int exponent(int baseNum, int exp)
    {
        if (exp<=0)
            return 1;

        return baseNum * exponent(baseNum, --exp);
    }

    public static void main(String a[])
    {
        int base=2;
        int exp =10;

        System.out.println("The power of "+exp+" in "+base+" is "+exponent(base,exp));
    }

}
于 2012-11-01T17:45:45.420 回答
0

不要忘记,对于每个递归函数,您都需要一个基本案例。停止条件`static double r2(float base, int n) {

    if (n<=0) return 1;
    return  base*r2(base,n-1);

}
于 2015-08-16T20:01:17.400 回答