C#에서는 곱셈 연산자(*)를 사용하지 않고도 재귀 호출만으로 두 숫자의 곱을 구할 수 있습니다. 이 방법의 핵심 원리는 '곱셈은 같은 수를 여러 번 더하는 것'이라는 점을 이용하는 것입니다.
기본 개념
먼저 곱할 두 숫자를 설정합니다.
val1 = 10; val2 = 20;
이어서 곱을 계산할 메서드를 호출합니다.
product(val1, val2);
product 메서드 내부에서는 재귀 호출을 통해 곱을 구합니다. 두 번째 숫자가 0이 될 때까지 첫 번째 숫자를 계속 더하는 방식입니다.
val1 + product(val1, val2 - 1)
동작 원리
예를 들어 product(10, 20)이 호출되면 다음과 같이 진행됩니다.
- 10 + product(10, 19)
- 10 + 10 + product(10, 18)
- … (같은 과정 반복)
- 최종적으로 10을 20번 더해 200이 반환됩니다.
또한 코드에는 성능 최적화 장치가 포함되어 있습니다. 첫 번째 인수가 두 번째 인수보다 작으면 두 값을 서로 바꿔 호출합니다. 예를 들어 product(3, 100)은 product(100, 3)으로 변경되어 재귀 호출 횟수가 100번에서 단 3번으로 줄어듭니다.
전체 예제 코드
using System;
class Calculation {
public static void Main() {
int val1, val2, res;
// 곱할 두 숫자
val1 = 10;
val2 = 20;
// 곱 구하기
Demo d = new Demo();
res = d.product(val1, val2);
Console.WriteLine("{0} x {1} = {2}", val1, val2, res);
Console.ReadLine();
}
}
class Demo {
public int product(int val1, int val2) {
if (val1 < val2) {
return product(val2, val1);
} else if (val2 != 0) {
return (val1 + product(val1, val2 - 1));
} else {
return 0;
}
}
}실행 결과
10 x 20 = 200
이처럼 재귀 함수는 종료 조건(val2 == 0)에 도달할 때까지 자기 자신을 호출하며 결과를 누적합니다. 다만 재귀 깊이가 깊어지면 스택 오버플로가 발생할 수 있으므로, 실무에서는 큰 수의 곱셈에는 일반 연산자를 사용하는 것이 좋습니다.