2016-11-20 1 views
1

따라서 하나의 매개 변수 n을 갖는 재귀 적 방법이 있으며 (예 : 루프를 사용할 수 없음), 프로그램은 2^n "*"를 출력합니다. 예를 들어, n이 2이면 출력은 ****, n이 3 인 경우 출력은 ********입니다.java 간단한 재귀

일부 무한 재귀 문제가 발생하여이 문제가 발생합니다.

처음에 나는 이것을 가지고 있었다 : 그러나 나는 곧 수표에 도달하지 않을 것이라는 것을 곧 깨닫는다. 그 ↑↑↑

enter image description here

이 있어야했다 N + 1 (작동하지 않는 경우에도)

그런 다음 나는이 시도 :
public class test { 

    public static void main(String[] args) { 
     printPowerOfTwoStars(3); 

    } 

    public static void printPowerOfTwoStars(int n){ 
     n = (int)Math.pow(2, n); 
     if(n == 0){ 
      return; 
     } 
     else{ 
      System.out.print("*"); 
      printPowerOfTwoStars(n-1); 
     } 

    } 

} 

일부 무한 재귀에 란을 다시.

이것은 단순한 논리를 가진 간단한 프로그램처럼 보이지만, n과 비교되는 것이 바뀌기 때문에 상태 확인에 문제가 있습니다.

이 문제는 어떻게 해결해야합니까?

도우미 메서드를 사용하거나 정적 변수를 만들지 않고.

당신이

답변

5

당신은 n의 힘 2 단지 2 n-1의 힘에 있다는 사실을 사용할 필요가 감사, 두 배. 귀하의 기본 경우는 0의 2에서 1의 확률이 1이됩니다.

public static void printPowerOfTwoStars(int n){ 
    if(n <= 0){ 
     System.out.print("*"); 
    } 
    else{ 
     printPowerOfTwoStars(n-1); 
     printPowerOfTwoStars(n-1); 
    } 
} 
+0

이것은 훌륭합니다! 이 경우에 Math.pow를 사용할 방법이 있는지 궁금합니다. 고맙습니다! – yyin

+0

나는'Math.pow'를 사용하지 않을 것이라고 생각했습니다. –

+0

문제가 3^n 번 인쇄되는 경우이 문제를 어떻게 구현합니까? 동일한 논리를 사용하면 ** 3^n은 3^n-1이고 3 배 (3^n-1) x 3 = 3^n ** ... 어떻게 할 것입니까? 그냥'printPowerOfTwoStars (n-1);'세 번입니까? – yyin