Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 재귀(Recursion)를 활용해 두 숫자의 곱 구하기

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)에 도달할 때까지 자기 자신을 호출하며 결과를 누적합니다. 다만 재귀 깊이가 깊어지면 스택 오버플로가 발생할 수 있으므로, 실무에서는 큰 수의 곱셈에는 일반 연산자를 사용하는 것이 좋습니다.