递归指数方法堆栈溢出



我已经到处寻找我的问题的解决方案,但没有得到一个。所以我要做的就是用递归来求出一个传入的整数变量的底数的指数次幂。例如3²= 9。我的解决方案确实看起来像我在这些论坛中发现的,但它不断地给我一个堆栈溢出错误。这是我目前所知道的。(为了使它更容易,我尝试了它与int直接不使用扫描器来测试我的递归)有什么想法?

public class Power {
   public static int exp(int x,int n) {        
      n = 3;
      x = 2;
      if (x == 0) {
         return 1;
      }
      else { 
         return n * exp(n,x-1);
      }
   }
   public static void main(String[] args) {                           
      System.out.println(exp(2,3));
   }
}

你有三个问题。

首先,在方法内部,您重新分配了xn。所以不管你传入的是什么,x总是2,n总是3。这是无限递归的主要原因——就方法而言,这些值永远不会更新。从你的代码中删除这些赋值。

接下来,您的基本情况是不正确的-您希望在n == 0时停止。修改你的if语句来反映这一点。

第三,递归步骤是错误的。您希望调用下一个方法时将值降为n,而不是x。它应该是return x * exp(x, n-1);

最新更新