我不擅长递归...
我需要仅使用递归将 char[]
数组转换为字符串 - 不使用 for()
、while()
等等循环。例如,如果我有一个 char 数组:
a[0]='H', a[1]='e', a[2]='l',a[3]= 'l',a[4]= 'o'
它返回H e l l o
。
我做错了什么?
public String toFormattedString(char[] a)
{
int temp =a.length;
if (a == null)
return "null";
if (a.length == 0)
return "0";
if( a.length == 1 )
else if( a[0] == a[a.length] )
return toFormattedString (a[a.length -1])+a[a.length];
最佳答案
在递归中,方法使用原始调用的修改数据调用自身。这样做直到达到某种基本情况,在这种情况下不再可能修改数据。
在您的情况下,基本情况是 char 数组仅包含一个元素。这个字符将是字符串。否则,它是第一个元素,其余元素附加在递归调用中。
字符串"Hello"
是 'H'
与 toFormattedString({'e','l','l','o'})
附加。因此,如果您的 char 数组仅包含一个元素 (length==1)
只需将此元素作为字符串值返回即可。
否则,获取第一个元素并递归到没有第一个元素的剩余 char 数组。递归直到只剩下一个元素。
public static String toFormattedString(char[] a)
{
if (a.length==1) return String.valueOf(a[0]);
else
return a[0]+toFormattedString(Arrays.copyOfRange(a,1,a.length)) ;
}
你甚至可以将方法体放在一个不可读的行中(不推荐,我提到它只是为了好玩):
return((a.length==1)?String.valueOf(a[0]):a[0]+toFormattedString(Arrays.copyOfRange(a,1,a.length)));
更新: A switch
- 语句在本例中给出了可读的代码:
public static String toFormattedString(char[] a)
{
switch (a.length)
{case 0 : return "";
case 1 : return String.valueOf(a[0]);
default: return a[0]+toFormattedString(Arrays.copyOfRange(a,1,a.length));
}
}
用法:
public static void main (String[] args) throws java.lang.Exception
{
System.out.println(toFormattedString("Hello".toCharArray()));
}
关于java - 如何使用递归循环从 char[] 数组返回字符串。(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4633297/