2009-11-13 5 views
-1

재귀를 사용하여 문자열 str1과 str2를 "인터리빙"한 문자열을 인쇄하는 방법을 작성하려고합니다. 즉 str1의 첫 번째 문자 다음에 str2의 첫 번째 문자가오고 str1의 두 번째 문자 다음에 str2의 두 번째 문자가 오는 두 문자열의 문자를 대체해야합니다.재귀를 사용하여 두 문자열 (인터리빙)에서 문자를 교대로 인쇄하십시오.

나는 이것에 대해 갈 것인가?

+0

가 왜이 작업을 수행 할 수 있습니까? 숙제가 아닌가? – bmargulies

답변

3

재귀의 일반적인 생각은 어떤 종류의 상수 값을 반환하고 다른 모든 사건은 그 위에 구축 된 종단 위치를 가지고있다.

가 가 가

그렇게로서 구현 될 수

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) 

, 종료 조건은 예를 들면

, 팩토리얼 함수 f(n) = n * (n-1) * (n-2) * ... * 2 * 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 
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)); 
} 
+0

그리고 실제로 그것은 작동합니다. 어떻게 든 그것은 하나의 재귀 수준에서 두 문자열 모두에서 하위 문자열을 수행하는 "더러운"것처럼 보일 수 있지만 * * 더 효율적입니다. – paxdiablo

+0

어느 쪽이든 더러운 ... 재귀와 관련된 바보 같은 짓;) 문자열 작성기를 사용하는 대신 문자열 추가의 모든 오버 헤드는 말할 것도 없습니다. – Kieveli

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)); 
} 
-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]); 
    } 
관련 문제