>

안녕하세요.

내 문제를 당신과 나누고 싶습니다. 나는 재귀 적 인 방법을 연습하고 있으며 한 곳의 운동을 발견했습니다. 연습은 모든 짝수 자리에 0을 추가하는 재귀 방법을 만드는 것입니다. 누군가 아이디어가 있다면 여기에서 공유하면 좋을 것입니다.

<시간>

코드는 다음과 같습니다.

public static String adding0AfterEvenNumber(int number) {
    String s = String.valueOf(number);
    String result;
    if (number < 10 && number % 2 == 0) {
        return s + 0;
    }
}

코드의 주요 부분이 누락되었지만 실제로 코드를 만드는 방법에 대한 아이디어가 없습니다. 미리 감사드립니다

<시간>
  • 답변 # 1

    이 코드를 고려하십시오 (줄 주석)

    // somewhere to store the result
     static StringBuilder result = new StringBuilder();
     public static void main(String [] args) {
         // starting string
         String s = "1234567";
         // or as 
         //String s = Integer.toString(1234567);
         // call with full string
         recurse (s);
         // print result
         System.out.println("result : " + result.toString());
    }
    private static void recurse(String s) {
        // take first char and add to result
        String c = s.substring(0,1);
        result.append(c);
        // see if even, note no error checking for is a number
        if (Integer.parseInt(c) % 2 == 0) {
            result.append("0");
        }
        // then if still has content then strip off first char and call again
        if (s.length() > 1)
            recurse(s.substring(1));
    }
    
    

    출력

    결과 : 1203405607

  • 답변 # 2

    다음과 같이 되풀이 할 것입니다 :

    public static String adding0AfterEvenNumber(int number) {
        return ((number >= 10) ? adding0AfterEvenNumber(number / 10) : "") + String.valueOf(number % 10) + ((number % 2 == 0) ? "0" : "");
    }
    
    

    여기 사용해보십시오.

    <script src="//repl.it/embed/JDEV/1.js"></script>
    
    

    첫 번째 부분은 터미널 조건으로, 한 자리 숫자가 있으면 아무 것도 추가하지 않으며, 마지막 자리를 제거한 후 재귀를 호출합니다.

    (number > 10) ? adding0AfterEvenNumber(number / 10) : "")
    
    

    두 번째 부분은 짝수 인 경우 마지막 자리에 0을 추가합니다.

    String.valueOf(number % 10) + ((number % 2 == 0) ? "0" : "")
    
    

  • 답변 # 3

    짝수는 짝수 위치에없는 짝수 값을 가진 숫자라는 것을 알고 있습니다. 다음 함수는 값이 포함 된 문자열을 반환해야하지만 꼬리 값만큼 머리 값을 이동하면 정수를 반환 할 수 있습니다.

       public String add0onEven(int number, int initPos, int endPos) {
        if (initPos == endPos - 1) {
            int digit = (number / (int) Math.pow(10, initPos)) % 10;
            if (digit % 2 == 1) {
                return digit + "0";
            } else {
                return "" + digit;
            }
        } else if (endPos - initPos < 1) {
            return "";
        } else {
            int sepIdx = (endPos - initPos) / 2 + initPos;
            String tail = add0onEven(number, initPos, sepIdx);
            String head = add0onEven(number, sepIdx, endPos);
            return head + tail;
        }
    }
    
    

    다음과 같이 메소드를 호출 할 수 있습니다 :

    add0onEven(1234567, 0, 7)
    
    

    이 호출을 위해 얻은 출력 :

    10230450670
    
    

    이 솔루션은 메모리에 미치는 영향이 적기 때문에 하위 문자열 솔루션보다 우수하다고 생각합니다 (각 하위 문자열 호출마다 새 문자열을 만들 필요가 없습니다). 또한 재귀에 더 적합한 Divide and Conquer 접근 방식을 따릅니다.

  • 이전 r - 데이터 조작의 어려움
  • 다음 wpf - Windows 10에서 닫기/최소화/축소 버튼의 글꼴 군은 무엇입니까?