我正在尝试编写一种方法,该方法使用递归来打印由“交错”字符串str1和str2形成的字符串。换句话说,它应该替换两个字符串中的字符:str1中的第一个字符,str2中的第一个字符,str1中的第二个字符,str2中的第二个字符,等等。
我该怎么做?
答案 0 :(得分:3)
递归的一般概念是有一个终止位置,它返回某种常量值,然后每个其他情况建立在它之上。
例如,阶乘函数f(n) = n * (n-1) * (n-2) * ... * 2 * 1
具有以下终止条件和相关函数:
f(1) = 1
f(n) = n * f(n-1) for all n > 1
所以可以实现为:
def factorial(n):
if n == 1:
return 1;
return n * factorial(n-1)
在您的特定情况下,终止条件是当任一字符串为空时,此时您只需将另一个字符串添加到结尾。依赖函数只是从第一个字符串中获取第一个字符,然后调用下一个级别向下传递该字符串的其余部分,另一个字符串但是以相反的顺序,以便您交替。
def mix (s1, s2):
if s1 == "" return s2
if s2 == "" return s1
return s1.firstChar() + mix (s2, s1.allButFirstChar());
在Java中,这将转化为以下内容。请注意,如果这是家庭作业并且你使用它,你几乎当然失败,因为你认为你的教育工作者没有监控这些网站是愚蠢的。
public class Demo {
public static String Mix (String s1, String s2) {
if (s1.length() == 0) return s2;
if (s2.length() == 0) return s1;
return s1.substring(0,1) + Mix (s2, s1.substring(1));
}
public static void main(String[] args) {
System.out.println (Mix ("Hello", "There"));
System.out.println (Mix ("Hi", "There"));
System.out.println (Mix ("Hello again", "Pax"));
System.out.println (Mix ("", ""));
System.out.println (Mix ("1111", ""));
System.out.println (Mix ("111", "2"));
System.out.println (Mix ("111", "22"));
System.out.println (Mix ("111", "222"));
System.out.println (Mix ("111", "2222"));
System.out.println (Mix ("11", "2222"));
System.out.println (Mix ("1", "2222"));
System.out.println (Mix ("", "2222"));
}
}
输出:
HTehlelroe
HTihere
HPealxlo again
1111
1211
12121
121212
1212122
121222
12222
2222
答案 1 :(得分:2)
这应该有效:
public String Interleave( String first, String second )
{
if ( first.length() == 0 )
return second;
if ( second.length() == 0 )
return first;
return first.substring(0,1) + second.substring(0,1) +
Interleave( first.substring(1), second.substring(1) );
}
答案 2 :(得分:0)
这是codingBat/String-2/mixString
问题,除了您需要递归解决方案。
我的解决方案与Kieveli的解决方案基本相同:
public String mixString(String a, String b) {
return
a.isEmpty() ? b :
b.isEmpty() ? a :
a.substring(0, 1) + b.substring(0, 1)
+ mixString(a.substring(1), b.substring(1));
}
答案 3 :(得分:-1)
String s1="12345";
String s2="67890";
char ch1[] = s1.toCharArray();
char ch2 [] = s2.toCharArray();
char[] ch3 = new char[10];
// System.out.println("ch1"+ch1);
for(i=0;i<10;i++)
{
ch3[i*2]=ch1[i];
ch3[i*2+1]=ch2[i];
System.out.println("ttttttttttt");
System.out.println(ch3[i]);
}