2016-11-20 85 views
1

所以有一个递归方法(不能使用任何循环),它有一个参数n,程序会打印出2^n“*”,例如,如果n是2,输出是****,如果n是3,则输出是********。java简单的递归

我遇到了这个问题,因为我遇到了一些无限递归问题。

首先我有这个:但我很快意识到,n永远不会达到检查。

enter image description here

↑↑↑这应该是N + 1(即使它不工作)

然后我尝试这样的:

public class test { 

    public static void main(String[] args) { 
     printPowerOfTwoStars(3); 

    } 

    public static void printPowerOfTwoStars(int n){ 
     n = (int)Math.pow(2, n); 
     if(n == 0){ 
      return; 
     } 
     else{ 
      System.out.print("*"); 
      printPowerOfTwoStars(n-1); 
     } 

    } 

} 

遇到一些无限递归再次。

这看起来像是一个简单的逻辑程序,但我在条件检查时遇到了麻烦,因为与n比较的内容会不断变化。

我该如何解决这个问题?

不使用任何辅助方法或创建任何静态变量。

谢谢

回答

5

您需要使用一个事实,即2的n功率仅有2至n-1力量,增加了一倍。您的基本情况是2到0的幂是1.

public static void printPowerOfTwoStars(int n){ 
    if(n <= 0){ 
     System.out.print("*"); 
    } 
    else{ 
     printPowerOfTwoStars(n-1); 
     printPowerOfTwoStars(n-1); 
    } 
} 
+0

太棒了!现在我只是好奇,在这种情况下是否有方法使用Math.pow。谢谢! – yyin

+0

我认为整个问题不是使用'Math.pow'。 –

+0

如果问题打印3^n次,我将如何实现这个问题?使用相同的逻辑,** 3^n只是3^n-1,三倍(3^n-1)x 3 = 3^n ** ...你会如何做到这一点?它只是'printPowerOfTwoStars(n-1);'三次? – yyin