java - 使用递归打印字符串 n 次

标签 java recursion

我在执行以下练习时遇到问题。

编写一个方法 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/

相关文章:

Karatsuba 乘法算法的 JavaScript 实现

c - 变量是如何递归存储在内存中的?

algorithm - 递归到迭代 - 还是优化?

java - 使用Xstream动态创建对象(Java)

C++递归实例讲解

Java:如何记住保存的文件在哪里

Java:如何显示 "method undefined"异常的 Jar 文件路径?

mysql - SQL 和 Delphi : recursive mechanism for creating a tree from a table

java - 不知道如何在 Genymotion Android 模拟器中将文件复制到 SD 卡

java - 用于矩阵乘法的线程程序