印刷" *"与递归

时间:2016-04-14 21:43:32

标签: java recursion

我需要一些帮助来解决一个练习。在这种方法中,我必须打印等于2的x次幂的星号(" *")。

例如,如果我有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;
    }
}

3 个答案:

答案 0 :(得分:2)

这是解决问题的一个想法,而不是在代码中泄露解决方案。

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

答案 1 :(得分: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);
}

使用输入2 ^ x:

调用writeStars
writeStars(Math.pow(2, x));

答案 2 :(得分:0)

因为它是你客户的退货方法,你应该

int num = writeStars(someNum);

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

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