2013-04-05 3 views
0
public class FindSum 
{ 
private static int sum(int n) 
{ 
if (n==1) 
return 1; 
else 
return n + sum (n-1); 
} 
public static int getSum(int n) 
{ 
if (n>0) 
return sum(n); 
else 
{ 
throw new IllegalArgumentException 
("Error: n must be positive"); 
} 
} 
} 

내 책에 따르면,이 테스트 전에 n> 0 테스트합니다. 나는 "if (n> 0)"알고리즘이 알고리즘 뒤에 오는 경우 왜 그런 경우인지 이해하지 못합니다. 이 테스트를 수행하기 위해 두 가지 방법을 뒤집어서는 안됩니까?재귀 드라이버 메서드

답변

0

주문 번호는 입니다.은 중요하지 않지만, 실행 순서는입니다.

은 확인이 성공한 경우 명시 적으로 sum을 호출하므로 getSum으로 전화하는 한 그 확인에 대해 걱정할 필요가 없습니다.

+0

와우. 웬일인지 나는 그것에 관해 생각하지 않았다. 감사! –

0

Java에서 클래스의 메소드 순서는 중요하지 않습니다. getSum()이 sum()을 호출한다는 것을 알 수 있습니다.

그래서 getSum (0)을 호출하면 어떻게 될지 생각해보십시오. if 조건이 실패하고 아무 일도 일어나지 않을 경우 오류가 발생합니다. getSum (5)를 호출하면 어떻습니까? 그러면 sum (5)을 반환 할 것입니다. 하지만 sum (5)은 무엇입니까? 이제 우리는 기본 케이스에 도달 할 때까지 재귀 작업을 수행하는 sum() 메서드에서 우리가 마침내 1 + 14를 반환 할 것입니다.