【问题标题】:Recursive Exponent Method递归指数法
【发布时间】:2012-10-22 08:23:29
【问题描述】:
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

【问题讨论】:

  • 递归方法中没有基本情况!
  • 如果你需要它在十次后停止,你需要一个变量来表示它被递归的次数。
  • 您需要将幂作为参数传递,例如power(baseName, n);,每次递归时将幂减一。

标签: java methods recursion exponent


【解决方案1】:

做类似的事情

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      公共类 Exp
      {
      公共静态 int 指数(int a, int n)
      {
      如果 (n==0) { 返回 1; } // 基础
      else // 递归
      {
      a *= 指数(a, n-1);
      返回一个;
      }
      }
      公共静态 void main(String[] args)
      {
      System.out.print(exponent(2, 10));
      }
      }

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            【解决方案6】:

            不要忘记,对于每个递归函数,您都需要一个基本案例。停止条件` 静态双 r2(浮点基数,int n) {

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-05-10
              • 2017-10-13
              • 1970-01-01
              • 2015-06-16
              • 1970-01-01
              • 1970-01-01
              • 2017-11-27
              • 1970-01-01
              相关资源
              最近更新 更多