2012-10-29 3 views
3

지난 시험을 위해 공부하고 num = 7 일 때 반환 값이 무엇이냐고 묻는이 질문을 보았습니까? BlueJ에 연결하면 16이라고 표시됩니다. func1이 16으로 만드는 것은 무엇입니까? 메서드 내에서 선언 된 메서드는 어떻게 다시 사용할 수 있습니까? 나는이 정확한 예제를 찾기는 어려웠지만 찾기가 힘들었습니다. 정상적으로 메소드를 사용하는 것으로 끝납니다. 이 recursion라고메서드에서 선언 된 동일한 메서드를 사용합니까?

public int func1(int num) 
{ 
    if (num <= 2) return 1; 
    return func1(num – 2) + num; 
} 
+0

예, 16은 num = 7에 대해 정확합니다. – LuigiEdlCarno

답변

6

(죄송이 관련 숙제/시험이기 때문에 당신에게 완전한 해답을 제공하지 않음)

그래서, func1(num – 2)이를 호출합니다 동일한 기능 - num = num - 2public int func1(int num), 그래서, 당신은 재귀 num >= 2

때까지 다음과 같이 진행됩니다 -

func(n) 
    calls func(n-2) 
     calls func(n-4) 
     .. so on 
     calls func(1) 
      returns 1 
     returns 1 + 3 + ... + (n - 4) 
     returns 1 + 3 + ... + (n - 4) + (n - 2) 
    returns 1 + 3 + ... + (n - 4) + (n - 2) + n 

업데이트 : - 위의 재귀를 일반화하여 작동 원리를 파악할 수 있습니다.

당신은 통과 할 수 있습니다 : - Recursion - Wiki Page 내부 기준이 충족 될 때까지이 기능은, 다른 매개 변수 값으로 자신을 호출 Recursion

라고 당신이 (especcially 당신의 시험)에서보고 싶은

+0

고마워, 재귀 연구에 시간이 걸리는 것 같아. 그래도 말이 되네. 모두에게 감사합니다/ – user1782493

+0

@ user1782493.이 재귀 적 과정의 배경에서 일어나는 일을 이해하려고 노력해야합니다. 그러면 재귀 코드를 작성하는 것이 더 쉬울 것입니다. –

3

감사합니다. 이를 이해하는 가장 좋은 방법은 디버거에서 코드를 시청하고 호출 순서를 종료하는 방법 (즉, 은 무기한으로을 호출하지 않음)을 고려하는 것입니다.

. - 당신이 그것을 사용하는 동일한 기능에 대한 재귀 호출이다

+1

... 또는 함수 시작 부분에 변수 값을 인쇄하십시오. – krlmlr

1

글쎄, 이것은 recursion이 전부입니다. 특정 종료 조건이 만족 될 때까지 메서드가 재귀 적으로 호출되는 중입니다. 귀하의 경우, 종료 조건은 메소드 매개 변수 값이 < = 2의 값에 도달 할 때입니다.

1

재귀를 이해하려면 먼저 재귀를 이해해야합니다.

Here 당신은 그에 대한 좋은 설명을 찾을 수 있습니다.

+0

이 답변에 다시 연결하지 않아서 실망합니다. –

0

메소드에서 선언 된 메소드는 어떻게 다시 사용할 수 있습니까?

답변 : 호출 된 메소드 내에서 같은 방법을 호출 Recursion (computer science)

당신이 나무로 작업 할 때 당신은 루프

public int func1(int num) { 
     int res=1; 
     while(num >= 2) { 
      res += num; 
      num = num-2; 
     } 
     return res; 
    } 

그러나 재귀를 사용하여 재귀를 사용하지 않고 할 수있는

는 코드 재사용에 가장 중요한 기능 중 하나입니다 , 계층 구조 등,

관련 문제