递归指数法

时间:2012-11-01 17:23:23

标签: java methods recursion exponent

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

        return temp * exponent(baseNum);             
}

现在,如果我调试它,上面的方法会将n * n转换为无穷大,所以它仍然可以工作,但是我需要这个递归方法在10次后停止,因为我的教师要求我们找到给定幂10的指数。 / p>

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

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

所以输出应该是:

The power of 10 in 2 is 1024

OR

The power of 10 in 5 is 9765625

6 个答案:

答案 0 :(得分:3)

执行类似

的操作
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));
}

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

答案 1 :(得分:1)

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

public class Exp
{
public static int exponent(int a, int n)
{
if (n==0) { return 1; } // base
else // recursion
{
a *= exponent(a, n-1);
return a;
}
}
public static void main(String[] args)
{
System.out.print(exponent(2, 10));
}
}

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

public static int exponent(int baseNum, int power) {
   if(power == 0){
      return 1;
   }else{ 
      return baseNum * exponent(baseNum, power-1);  
   }           
}

答案 4 :(得分:0)

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

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

    这是代码。

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

答案 5 :(得分:0)

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

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

}