递归指数法


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

现在,如果我进行调试,上面的方法将N * n变成无限,因此它仍然有效,但是我需要这种递归方法在10次之后停止,因为我的教练要求我们找到指定的指数。<<<</p>

该方法只有一个参数,以下是调用指数的一些示例:

                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

之类的事情
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));
}

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

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

以下是我的讲师Penn Wu教授在演讲中提供的。

公共类Exp 
{
公共静态int指数(int a,int n)
{
if(n == 0){返回1;}//基础
else//递归
{
a *=指数(a,n-1);
返回a;
}
}
公共静态void main(string [] args)
{
system.out.print(endent(2,10));
}
}

是否应该有2个参数并处理下面的退出条件?

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

对于递归功能,我们需要:

  1. 检查停止条件(即exp是0时,返回1)
  2. 用调整状态(即基本 * 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));
    }
}

别忘了,对于每个递归功能,您都需要一个基本情况。停止条件静态双R2(浮子基座,int n) {

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

我偶然地来到这里,我认为可以做得更好,因为人们很容易弄清楚,如果Exp是x^2n = x^n * x^n =(x)^2)^n,因此,您可以只计算X X,然后调用具有N递归和产品的POW(X,N)。相反,如果功率是奇数的,那么我们只是做X pow(x,n-1),然后再使力量再次发挥作用。但是,一旦N-1即使,我们都可以直接编写X pow(x X,(N-1)/2)添加额外的产品并使用与偶数相同的代码指数。

int pow_( int base, unsigned int exp ) {
        if( exp == 0 )
                return 1;
        if( exp & 0x01 ) {
                return base * pow_( base*base, (exp-1)/2 );
        }
        return pow_( base*base, exp/2 );
}

最新更新