python/algorithm
Recursion
Balang
2024. 3. 4. 18:57
728x90
Recursion
- 자기 자신을 호출하는 함수
void func(...)
{
func(...);
}
위 함수를 실행코드로 짜보자
public class Recursive1 {
public static void main(String[] args) {
func();
}
public static void func(int k) {
System.out.println("Hello");
func();
}
}
위와 같은 코드를 실행하게 되면 return문이 없기 때문에 무한 반복으로 Hello를 출력하면서 에러가 발생하게 된다.
그럼 Recursion은 항상 무한루프에 빠질까?
그건 아니다.
또 하나의 코드를 보자
public class Code02 {
public static void main(String[] args) {
int k = 4;
func(k);
}
public static void func(int k) {
if (k<=0) // Base case : 적어도 하나의 recursion에 빠지지 않는 경우가 존재해야 한다.
return;
else {
System.out.println("Hello...");
func(k-1); // Recursive case : recursion을 반복하다보면 결국 base case로 수렴해야 한다.
}
}
}
해당 코드는 func() 함수에 k의 값을 1을 빼면서 재귀를 하기 때문에 k <= 0일때 return을 통해서 코드를 빠져나오게 된다.
순환함수와 수학적 귀납법
정리 : func(int n)은 음이 아닌 정수 n에 대해서 0에서 n까지의 합을 올바로 계산한다.
증명:
1. n=0인 경우: n=0인 경우 0을 반환한다. 올바르다.
2. 임의의 양의 정수 k에 대해서 n<k인 경우 0에서 n까지의 합을 올바르게 계산하여 반환한다고 가정하자.
3. n=k인 경우를 고려해보자. func은 먼저 func(k-1) 호출하는데 2번의 가정에 의해서 0에서 k-1까지의 합이 올바로 계산되어 반환된다.
메서드 func은 그 값에 n을 더해서 반환한다. 따라서 메서드 func은 0에서 k까지의 합을 올바로 계산하여 반환한다.
0! = 1
n! = n X (n-1)! n>0
728x90
반응형