我在执行以下练习时遇到问题。
编写一个方法 starString,它接受整数参数 n 并返回 2n 长(即 2 的 n 次方)的星号(星号)字符串。例如:
Call Output Reason
starString(0); "*" 2^0 = 1
starString(1); "**" 2^1 = 2
starString(2); "****" 2^2 = 4
starString(3); "********" 2^3 = 8
starString(4); "****************" 2^4 = 16
如果传递的值小于 0,则应抛出 IllegalArgumentException。
我已经尝试过了,但我正在寻找一种将字符串“*”相乘多次的方法。 PD:我无法使用.repeat
我一直在求 2 的 n 次方。正如我所尝试的那样
int x = (int)Math.pow(2,(n));
但我不知道该怎么办。
public static String starString(int n) {
if(n<0){
throw new IllegalArgumentException("No negative values allowed");
}
if(n==0){
return "*";
}else{
return starString(0) + starString(n-1);
}
}
test #1:starString(0)
return:"*"
result: pass
test #2:starString(1)
return:"**"
result: pass
test #3:starString(2)
expected return:"****"
your return:"***"
result: fail
test #4:starString(3)
expected return:"********"
your return:"****"
result: fail
test #5:starString(4)
expected return:"****************"
your return:"*****"
result: fail
test #6:starString(-1)
exp. exception:IllegalArgumentException
your exception:IllegalArgumentException on line 3: No negative values allowed
result: pass
最佳答案
这会起作用,尽管它会在大 n 时爆炸。
public static String starString(int n) {
if(n<0){
throw new IllegalArgumentException("No negative values allowed");
}
if(n==0){
return "*";
}else{
return starString(n-1) + starString(n-1);
}
}
显然你可以使用 2^n
public static int twoToN(int n) {
if(n<0){
throw new IllegalArgumentException("No negative values allowed");
}
if(n==0){
return 1;
}else{
return 2* twoToN(n-1);
}
}
关于java - 使用递归打印字符串 n 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56092864/