2016-09-24 3 views
-2
나는 자바에서 재귀를 사용하고

는 출력이 보일 것입니다 : 나에게 결과의를 제공자바 재귀 인쇄 반대

public void recursion(int n){ 
    if (n==0) { 
     return; 
    } 
    else { 
     System.out.print(number_pound(n)); 
     System.out.println(); 

     recursion(n-1); 
     System.out.print(stars(n)); 
     System.out.println(); 

    } 
} 

private String number_pound(int level) { 
    String s = ""; 
    for(int i=0;i<level;i++) 
     s+="#"; 
    return s; 
} 

private String stars(int level) { 
    String s = ""; 
    for (int i = 0; i < level; i++) 
     s+= "*"; 
    return s; 
} 

public static void main(String[] args) { 
    recursion rec = new recursion(); 
    rec.recursion(3); 
} 

이 방법 :

### 
## 
# 
* 
** 
*** 

나는 내 코드에 문제가 내가없이에서 System.out.println()이 두 부분을 분리해야하지만, 있다는 것을 알고 printline 문을 사용하면 숫자가 같은 줄에 걸리게됩니다.

+0

클래스 이름은 멤버 메소드와 같을 수 없습니다. ** 재귀 **. – progyammer

답변

0

이것은 당신이하려는 것을 할 것입니다, 나는 믿습니다. 파운드의 수를 표시 한 다음 별의 수와 새 줄을 인쇄합니다. 출력 문자열의 길이를 지정해야하므로 추가 length 매개 변수를 전달해야합니다. 너는 그 길이없이 할 수 없다고 나는 믿는다.

public void recursion(int n, int length){ 
    if (n<0) { 
     return; 
    } 
    else { 
     System.out.print(number_pound(n)); 
     System.out.print(stars(length - n)); 
     System.out.println(); 
     recursion(n-1, length); 
    } 
} 

그래서, 지금

rec.recursion(3, 3) 같은 주요 외모의 전화는 또한 나는 재귀를 사용하는 것보다 반복적으로 그것을 훨씬 더 좋을 것이다 생각합니다.

+1

반복적으로 수행하는 모든 작업은 재귀를 통해 수행 할 수 있습니다. –

+0

재귀 호출의 두 번째 매개 변수가 누락되었습니다. – Minato

+0

@Minato 지적 해 주셔서 감사합니다 :) – user007

0

당신이 놓친 몇 가지 :

  • 먼저 파운드를 인쇄하려면, 다음, 다음 새로운 라인을 시작하고 다음 과정을 각 줄에 인쇄 된 별의
  • 수를 반복한다 "는 사실이다 초기 수는 전달 - 수준 "
  • 을 당신은 recursion()
  • 에서이 두 숫자를 필요 당신은 n0 인 경우에도이 과정을 반복합니다.

이것은 어떻게해야입니다 : 추가의

public void recursion(int max, int n){ 
     if (n<0) { 
      return; 
     } 
     else { 
      System.out.print(number_pound(n)); 
      System.out.print(stars(max - n)); 
      System.out.println(); 
      recursion(max, n-1); 

     } 
    } 

    private String number_pound(int level) { 
     String s = ""; 
     for(int i=0;i<level;i++) 
      s+="#"; 
     return s; 
    } 

private String stars(int level) { 
    String s = ""; 
    for (int i = 0; i <level; i++) 
     s+= "*"; 
    return s; 
} 

public static void main(String[] args) { 
    recursion rec = new recursion(); 
    rec.recursion(3, 3); 
} 

커플 :

  • 사용 명명 표준. 클래스 이름은 대문자로 시작해야합니다. recursion은 좋은 이름이 아닙니다.
  • 정확히 같은 이름의 클래스와 메소드를 갖는 것도 나쁜 습관입니다. 클래스 이름을 recursion로 변경하십시오.
0
public class recursion { 
    int k;     
    public void recursion(int n){ 

     if(k==0){ 
     k=n; 
     } 
    if (n<0) { 
     return; 
    } 
    else { 

     System.out.print(number_pound(n)+stars(k-n)); 
     System.out.println(); 

     recursion(n-1); 


    } 
} 

private String number_pound(int level) { 
    String s = ""; 
    for(int i=0;i<level;i++) 
     s+="#"; 
    return s; 
} 

private String stars(int level) { 
    String s = ""; 
    for (int i = 0; i < level; i++) 
     s+= "*"; 
    return s; 
} 

public static void main(String[] args) { 
    recursion rec = new recursion(); 

    rec.recursion(3); 
} 

}

0

변수 length는 (귀하의 경우 3) 최대 수를 나타냅니다한다. 당신은 여기서 n은 출력을 얻기 위해 0보다 작은

public void recursion(int n, int length){ 
    if(n>=0){ 
     System.out.print(number_pound(n)); 
     System.out.print(stars(length - n)+"\n"); 
     recursion(n-1, length); 
    } 
} 

전화 recursion(3,3) 될 때까지 n #S 및 length - n 별을 표시 유지해야합니다.recursion() 메서드의 시그니처를 (int n)으로 지정하려면 전역 정적 변수를 사용하여 recursion()을 호출하기 전에 main 메서드에서 최대 개수를 지정하는 최대 수를 참조 할 수 있습니다.

0
int length = 3; 

private List<String> newList(String x, int length) { 
    return Arrays.asList(new String[length]).stream().map(s -> x) 
      .collect(Collectors.toList()); 
} 

private void recurSymbol(String x, String y, int length) { 
    List<String> list = newList(x, length); 
    list.addAll(newList(y, this.length - length)); 
    System.out.println(String.join("", list)); 
    if(length > 0) recurSymbol(x, y, length - 1); 
} 

public void recursion(String x, String y) { 
    recurSymbol(x, y, length); 
} 

가 그럼 그냥 분명히

recursion("#", "*"); 

같은 전화, 길이는 0 이상을 int로 할 수있다.