Java CodingBat——递归编码

Java CodingBat——递归编码,java,recursion,tail-recursion,Java,Recursion,Tail Recursion,我正在尝试前面的编码bat问题: 给定一个字符串和一个int n,返回一个由前n个字符组成的字符串 字符串,后跟字符串的前n-1个字符,依此类推。你 可以假设n在0和字符串长度之间,包括0和字符串长度(即n =0和n啊,我发现了你的问题 只有当n==0时,才能返回空字符串 Returningstr将在调用repeatFront(Ch,1)和repeatFront(C,0)时再次返回额外的最后一个字母 通过将n==0的返回值更改为return”“;: if(n==0) { return "

我正在尝试前面的编码bat问题:

给定一个字符串和一个int n,返回一个由前n个字符组成的字符串 字符串,后跟字符串的前n-1个字符,依此类推。你 可以假设n在0和字符串长度之间,包括0和字符串长度(即n
=0和n啊,我发现了你的问题

只有当
n==0
时,才能返回空字符串

Returning
str
将在调用
repeatFront(Ch,1)
repeatFront(C,0)
时再次返回额外的最后一个字母

通过将
n==0的返回值更改为
return”“;

if(n==0) {
    return "";
}

啊,我发现了你的问题

只有当
n==0
时,才能返回空字符串

Returning
str
将在调用
repeatFront(Ch,1)
repeatFront(C,0)
时再次返回额外的最后一个字母

通过将
n==0的返回值更改为
return”“;

if(n==0) {
    return "";
}

啊,我发现了你的问题

只有当
n==0
时,才能返回空字符串

Returning
str
将在调用
repeatFront(Ch,1)
repeatFront(C,0)
时再次返回额外的最后一个字母

通过将
n==0的返回值更改为
return”“;

if(n==0) {
    return "";
}

啊,我发现了你的问题

只有当
n==0
时,才能返回空字符串

Returning
str
将在调用
repeatFront(Ch,1)
repeatFront(C,0)
时再次返回额外的最后一个字母

通过将
n==0的返回值更改为
return”“;

if(n==0) {
    return "";
}
好吧,这是有效的-

 public static void main(String[] args) {
    StringBuilder sb = new StringBuilder();
    repeatFront("Chocolate", 4,sb);
    System.out.println(sb);
}

public static void repeatFront(String str, int n,StringBuilder sb) {
    if(n==0) {
        return;
    }
    sb.append(str.substring(0,n));
    repeatFront(str,n-1,sb);
}
}
问题-对于n=0,返回sub是因为得到了最后一个额外的字符。我使用了
StringBuilder
,这使它变得清晰,并且消除了为每个调用创建额外字符串对象的开销。

这很有效-

 public static void main(String[] args) {
    StringBuilder sb = new StringBuilder();
    repeatFront("Chocolate", 4,sb);
    System.out.println(sb);
}

public static void repeatFront(String str, int n,StringBuilder sb) {
    if(n==0) {
        return;
    }
    sb.append(str.substring(0,n));
    repeatFront(str,n-1,sb);
}
}
问题-对于n=0,返回sub是因为得到了最后一个额外的字符。我使用了
StringBuilder
,这使它变得清晰,并且消除了为每个调用创建额外字符串对象的开销。

这很有效-

 public static void main(String[] args) {
    StringBuilder sb = new StringBuilder();
    repeatFront("Chocolate", 4,sb);
    System.out.println(sb);
}

public static void repeatFront(String str, int n,StringBuilder sb) {
    if(n==0) {
        return;
    }
    sb.append(str.substring(0,n));
    repeatFront(str,n-1,sb);
}
}
问题-对于n=0,返回sub是因为得到了最后一个额外的字符。我使用了
StringBuilder
,这使它变得清晰,并且消除了为每个调用创建额外字符串对象的开销。

这很有效-

 public static void main(String[] args) {
    StringBuilder sb = new StringBuilder();
    repeatFront("Chocolate", 4,sb);
    System.out.println(sb);
}

public static void repeatFront(String str, int n,StringBuilder sb) {
    if(n==0) {
        return;
    }
    sb.append(str.substring(0,n));
    repeatFront(str,n-1,sb);
}
}
问题-对于n=0,返回sub是因为得到了最后一个额外字符。我使用了
StringBuilder
,这使它变得干净,并且消除了为每个调用创建额外字符串对象的开销。

您可以使用以下方法:

public String repeatEnd(String str, int n) {
  if (n == 0)
  return "";

  String res = re(str, n);
  String resl ="";

  for (int i =0 ; i < n ; i ++){
    resl = resl + res;
  }
  return resl;
}
public String re(String s , int n){
  String end = "";

  int len = s.length();

  end = s.substring(len-n , len);

  return end;
}
publicstringrepeatend(stringstr,intn){
如果(n==0)
返回“”;
字符串res=re(str,n);
字符串resl=“”;
对于(int i=0;i
您可以使用以下功能:

public String repeatEnd(String str, int n) {
  if (n == 0)
  return "";

  String res = re(str, n);
  String resl ="";

  for (int i =0 ; i < n ; i ++){
    resl = resl + res;
  }
  return resl;
}
public String re(String s , int n){
  String end = "";

  int len = s.length();

  end = s.substring(len-n , len);

  return end;
}
publicstringrepeatend(stringstr,intn){
如果(n==0)
返回“”;
字符串res=re(str,n);
字符串resl=“”;
对于(int i=0;i
您可以使用以下功能:

public String repeatEnd(String str, int n) {
  if (n == 0)
  return "";

  String res = re(str, n);
  String resl ="";

  for (int i =0 ; i < n ; i ++){
    resl = resl + res;
  }
  return resl;
}
public String re(String s , int n){
  String end = "";

  int len = s.length();

  end = s.substring(len-n , len);

  return end;
}
publicstringrepeatend(stringstr,intn){
如果(n==0)
返回“”;
字符串res=re(str,n);
字符串resl=“”;
对于(int i=0;i
您可以使用以下功能:

public String repeatEnd(String str, int n) {
  if (n == 0)
  return "";

  String res = re(str, n);
  String resl ="";

  for (int i =0 ; i < n ; i ++){
    resl = resl + res;
  }
  return resl;
}
public String re(String s , int n){
  String end = "";

  int len = s.length();

  end = s.substring(len-n , len);

  return end;
}
publicstringrepeatend(stringstr,intn){
如果(n==0)
返回“”;
字符串res=re(str,n);
字符串resl=“”;
对于(int i=0;i
公共字符串repeatFront(字符串str,int n){
//取一个空字符串
字符串temp=“”;
//检查其是否大于n的零值
而(n>0)
{
//运行for循环并将字符串数据添加到temp string中
对于(inti=0;i
publicstringrepeatfront(stringstr,intn){
//取一个空字符串
字符串temp=“”;
//检查其是否大于n的零值
而(n>0)
{
//运行for循环并将字符串数据添加到temp string中
对于(inti=0;i
publicstringrepeatfront(stringstr,intn){
//取一个空字符串
字符串temp=“”;
//检查其是否大于n的零值
而(n>0)
{
//运行for循环并将字符串数据添加到temp string中
对于(inti=0;i
publicstringrepeatfront(stringstr,intn){
//取一个空字符串
字符串temp=“”;
//检查其是否大于n的零值
而(n>0)
{
//运行for循环并将字符串数据添加到temp string中

对于(inti=0;i你也可以使用这个

public String repeatFront(String str, int n){

    int i;
    String result = "";
    for(i=n; 0<i; i--){
        result += str.substring(0,i);
    }
    return result;
}
publicstringrepeatfront(stringstr,int-n){
int i;
字符串结果=”;

对于(i=n;0你也可以使用这个

public String repeatFront(String str, int n){

    int i;
    String result = "";
    for(i=n; 0<i; i--){
        result += str.substring(0,i);
    }
    return result;
}
publicstringrepeatfront(stringstr,int-n){
int i;
字符串结果=”;

对于(i=n;0你也可以使用这个

public String repeatFront(String str, int n){

    int i;
    String result = "";
    for(i=n; 0<i; i--){
        result += str.substring(0,i);
    }
    return result;
}
publicstringrepeatfront(stringstr,int-n){
int i;
字符串结果=”;

对于(i=n;0你也可以使用这个

public String repeatFront(String str, int n){

    int i;
    String result = "";
    for(i=n; 0<i; i--){
        result += str.substring(0,i);
    }
    return result;
}
publicstringrepeatfront(stringstr,int-n){
int i;
字符串结果=”;

对于(i=n;0您还可以使用Java11
String.repeat()


您还可以使用Java11
String.repeat()

您也可以使用Java