2016-12-18 4 views
0

정수 매개 변수 (n)를 받아들이고 n, n-1, n-2, n-3, ..., 0, ...과 같은 시퀀스를 쓰는 재귀 적 메서드를 어떻게 작성할 수 있는지 궁금합니다. (n-3), - (n-2), - (n-1), -n이다. 예 : 5,4,3,2,1,0, -1, -2, -3, -4, -5자바에서 재귀 시퀀스 만들기?

이 예의 기본 사례는 무엇입니까? 메소드는 종료시기를 어떻게 알 수 있습니까?

지금까지 내가 가진 :

public static void createSequence(int n) { 
 
\t if (n== 0) 
 
\t  return; 
 
\t else{ 
 
\t  System.out.println(n); 
 
\t  createSequence(n-1); 
 
     } 
 
    }

이는 양의 정수의 시퀀스를 생성, 어떻게 내가이 코드를 해결할 수 있습니까?

+1

힌트 : 당신이 createSequence'에 대한 호출 후 뭔가를 작성해야합니다 (N - 1)' –

+0

음이 아닌 보장 입력 정수인가? –

답변

0

가장 쉬운, 내가 생각, 보조 재귀 적 방법을 작성하는 것입니다 : 사용하여 또한

public static void createSequence(int n, int limit) { 
    if (n < limit) 
     return; 
    else{ 
     System.out.println(n); 
     createSequence(n-1, limit); 
    } 
} 

: 체크를 할 당신은 두 번째 매개 변수로 원래의 번호를 전달할 수 있습니다

public static void createSequence(int n) { 
    writeSequence(n, -n); 
} 
private static void writeSequence(int current, int limit) { 
    if (current >= limit) { 
     System.out.println(current); 
     writeSequence(current - 1, limit); 
    } 
} 
0

을 : createSequence(5, -5);,이 인쇄됩니다 : 이러한 경우

5 
4 
3 
2 
1 
0 
-1 
-2 
-3 
-4 
-5 
0

을, 당신은 일반적으로 도우미를 사용 재귀 호출 방법 :

public static void createSequence(int n) { 
    createSequenceHelper(n, -n); // be sure that 'n' is positive here 
} 

private static void createSequenceHelper(int n, int limit) { 
    if (n >= limit) { 
     System.out.println(n); 
     createSequenceHelper(n - 1, limit); 
    } 
} 
2
그냥 재귀 호출 후 -n 작성해야

:

public static void createSequence(int n) { 
    if (n == 0) { 
     System.out.println(n); 
     return; 
    } 
    else { 
     System.out.println(n); 
     createSequence(n-1); 
     System.out.println(-n); 
    } 
} 
+0

멋진 솔루션이지만 꼬리 재귀가 아닙니다. – Xephi

+0

AFAIK, 꼬리 재귀를 최적화하는 데있어 JVM에는 아무 것도 없으므로 별 문제가되지 않습니다. 어쨌든 재귀 적으로이 알고리즘을 구현하지는 않을 것입니다. –

+0

정보 주셔서 감사합니다;) – Xephi

0

을 고정!

public static void createSequence(int n) { 
    if (n== 0){ 
     System.out.println(0); 
     return; 
    }else{ 
     System.out.println(n); 
     createSequence(n-1); 
     System.out.println(n*-1); 
     } 
    } 
1

내가 파티에 늦게 해요 같은데, 그러나 여기 내 꺼야 : 긍정적이고 부정적인 입력을

public static void createSequence(int n){ 
    System.out.println(n); 
    if(n==0) return; 
    createSequence(n-Integer.signum(n)); 
    System.out.println(-n); 
} 

작품.

+1

최소 ... – greybeard

+0

@greybeard 네, 짧은 코드를 좋아합니다. – Rei

0

문제를 해결하는 가장 쉬운 방법은 아래 코드입니다. 여기서 start는이 재귀 함수를 호출하기 전에 n으로 초기화되어야합니다. (시작 = N)

public static void createSequence(int n, int start) { 
if (start + n == 0) 
    return; 
else{ 
    System.out.println(n); 
    createSequence(n-1, start); 
    } 
}