2016-04-14 122 views
-3

我需要一些帮助来解决一个练习。在这种方法中,我必须打印等于x的2的幂数的星号(“*”)。例如,如果我有2的2次方,它应该打印4个星号(“****”);用递归打印“*”

我有一个方法返回我正确的数字,但我有问题使用该数字打印这些星号。

这里是我的代码:

public static int writeStars(int number) { 
    if (number == 0) { 
     return 1; 
    } else { 
     int number2 = 2 * writeStars(number - 1); 
     System.out.println(" number " + number2); 
     return number2; 
    } 
} 
+4

“但我有问题,使用该号用于打印这些星号。“ - 这些会是什么问题?您没有包含任何星号打印代码。 – azurefrog

回答

2

下面是解决该问题的一个思路,不放弃在代码的解决方案。

你的想法是在正确的轨道上,意识到2 x = 2 * 2 x-1。要打印2 x*个字符,您可以打印2 x-1两次。在你的递归方法中,你的基例打印一个*字符,并让你的递归案例递归调用两次,传递适当的调整值。

+0

谢谢,问题解决了(: – Kasparas

0

因为它是在客户端返回的方法,你应该有

int num = writeStars(someNum); 

然后打印,你只需要一个简单的for循环

for(int i=0; i < num; i++) 
    System.out.print("*"); 
1

一种方式做到这一点是创建在第i次迭代中2 ^(i-1)星的串。因此,对于4次迭代(x = 4),每次迭代将有8,4,2,1颗星。您可以为每次迭代返回星号串并将它们连接起来以获得最终的字符串。

终止条件将是当输入大小为0这个代码可以帮助:

public static String writeStars(int y) { 
    //y is 2^x 
    if(y == 0) 
     return ""; 
    int num_stars = y - y/2; 
    StringBuffer stars_Buffer = new StringBuffer(num_stars); 
    for (int i = 0; i < num_stars; i++){ 
     stars_Buffer.append(""); 
    } 
    return stars_Buffer.toString() + writeStars(y/2); 
} 

呼叫writeStars与输入2^X:

writeStars(Math.pow(2, x)); 
+1

)你试过编译这个吗?当方法返回类型为int时,你在这里返回一个'String''',并且没有分号 – robotlos

+0

谢谢@robotlos,my坏。 – trans1st0r