2016-06-28 3 views
0

나는 rand2()returns 0 or 1 랜덤하게 있습니다. 재귀 함수의 기본 케이스는 몇 개입니까?

나는 동일한 확률로 rand2()return 0,1,2 를 사용하는 방법 rand3()을 만들려고하고 있습니다.

나는 4 개의 0,1 조합을 고려한 재귀 적 해결책을 생각해 냈습니다.

전체적으로 나는이 기능을 1 개 이상의 기본 케이스로 작성하여 작동 할 수 있기를 바랍니다.

하지만 재귀 함수가 하나 이상의 기본 사례를 가질 수없는 것처럼 보입니다. 나는 무엇을 놓치고

public static int rand3(){ 
     String str = ""; 
     str+= rand2(); 
     str+= rand2(); 
     System.out.println(str); 

     if(str=="00") 
      return 0; 
     else if(str=="11") 
      return 1; 
     else if(str=="01") 
      return 2;   
     else 
      return rand3(); 
    } 

: 여기

내 코드인가?

답변

0

하지만 재귀 함수는 하나 이상의 기본 사례를 가질 수없는 것처럼 보입니다.

정확하지 않습니다. 재귀 함수는 필요한만큼 많은 기본 사례를 가질 수 있습니다. (그리고 일부 재귀 함수는 확실히 하나 이상이 필요; 예를 들어, 재귀 피보나치 함수를.) 모두

모든 나는 그것이 작동하는 희망에, 1 개 이상의 기본 케이스로,이 기능을 썼다.

왜 그것이 작동하지 않는다고 생각합니까?


조금만 생각하면 코드를 리팩토링하여 하나의 기본 사례 만 만들 수 있습니다.

힌트 : rand2()는 정수를 반환 ... 당신은 덧셈과 곱셈의 정수에

+0

'rand2() + rand2()를 수행 할 수 있습니다; '이 방정식은 유일하지 않은 1 0 2 1을 제공합니다. 그러나 2 * rand2() + rand2(); 이 것은 0 1 2 3 고유하고 적합하며 기본 경우는'if (randSum <3) return randSum; '이 될 것입니다. 너 생각했던거야? –

+0

예. 그것이 내가 암시하고있는 것입니다. –

0

재귀가 필요한 이유를 확실히 알지 못합니다 (물론 학문적 인 운동이 아닌 경우). 루프 내에서 if 블록을 랩핑하고 첫 번째 세 가지 대안 중 하나에서 루프를 벗어나 네 번째 루프를 반복하여 루프를 다시 실행하십시오.

또한 루프 내에 str에 대한 지정을 포함해야합니다.

관련 문제