gpt4 book ai didi

java - 在JAVA中递归计算字符串中的字符

转载 作者:行者123 更新时间:2023-12-04 00:18:29 25 4
gpt4 key购买 nike

如果我有一个字符串 abcabcabcabc , 和一个 int N 3 ,我正在尝试返回 "cccc" .我知道如何使用 for循环,但我不知道如何使用递归来实现。

将不胜感激任何帮助。

这是我到目前为止所拥有的:

public String everyNth(String s, int n){
if(s.length() % n == 0){
return s.charAt(n-1) + "";
}
else {
return everyNth(s.substring(n, s.length()), n);
}
}

到目前为止,它只打印“c”而不是“cccc”。

最佳答案

这是一种方式

public String everyNth(String s, int n) {
if (s.length() >= n) {
return s.charAt(n - 1) + everyNth(s.substring(n), n);
} else {
return "";
}
}

您可以制定一个不需要对返回的结果做任何事情的尾递归版本。 Scala 等一些语言可以使用它进行优化,以避免有限的堆栈深度(和 StackOverflow 异常),但不能使用 java,如 for now .
public String everyNthAcc(String s, String acc, int n) {
if (s.length() >= n) {
return everyNthAcc(s.substring(n), acc + s.charAt(n - 1), n);
} else {
return acc;
}
}

@Test
public void tryIt() {
assertEquals("cccc", everyNthAcc("abcabcabcabc","", 3));
}

因此,就目前而言,每个堆栈帧的大小越小,递归可以获得的深度越深,这应该使它更进一步,但它有点奇怪:
public class EveryNth {

String value = "abcabcabcabc";
StringBuilder sb = new StringBuilder();
int nth = 3;

@Test
public void tryIt() {
everyNthAgain(nth);
assertEquals("cccc", sb.toString());
}

public void everyNthAgain(int curr) {
if (curr <= value.length()) {
sb.append(value.charAt(curr - 1));
everyNthAgain(curr + nth);
}
}
}

关于java - 在JAVA中递归计算字符串中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58941859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com