我需要一些帮助来解决一个练习。在这种方法中,我必须打印等于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;
}
}
答案 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:
调用writeStarswriteStars(Math.pow(2, x));
答案 2 :(得分:0)
因为它是你客户的退货方法,你应该
int num = writeStars(someNum);
然后打印,你只需要一个简单的for循环
for(int i=0; i < num; i++)
System.out.print("*");