Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java) 재귀 함수를 이용해 숫자의 각 자릿수 합 구하기

이 글에서는 재귀(recursion)를 사용하여 숫자의 각 자릿수 합을 구하는 방법을 알아봅니다. 재귀 함수란 특정 조건이 만족될 때까지 스스로를 반복해서 호출하는 함수를 의미합니다.

재귀는 항목들을 자기 유사적인 방식으로 반복하는 과정입니다. 프로그래밍 언어에서 하나의 함수가 자기 자신을 다시 호출할 수 있도록 허용하면, 이를 함수의 재귀 호출(recursive call)이라고 부릅니다.

대부분의 프로그래밍 언어는 스택(stack)을 이용해 재귀를 구현합니다. 일반적으로 어떤 함수(호출자)가 다른 함수 또는 자기 자신(피호출자)을 호출하면, 호출자는 실행 제어권을 피호출자에게 넘기게 되며, 이 과정에서 호출자로부터 피호출자에게 데이터가 전달되기도 합니다.

아래는 실제 동작 예시입니다.

입력

Enter the number : 12131415

출력

The Sum of digits of 12131415 is 18

알고리즘

Step 1 - 시작
Step 2 - 정수형 변수 my_input과 my_result 두 개를 선언
Step 3 - 사용자로부터 필요한 값을 읽어오거나 값을 직접 정의
Step 4 - 정수를 입력으로 받는 재귀 함수 'digitSum'을 정의. 이 함수는 기저 조건(base condition)에 도달할 때까지 자기 자신을 반복 호출하며 나머지를 계산
Step 5 - 재귀 함수 'digitSum'을 호출하고 그 결과를 'my_result'에 할당
Step 6 - 결과 출력
Step 7 - 종료

예제 1: 사용자 입력값 사용

이 예제에서는 사용자가 직접 숫자를 입력합니다. 코드를 실행하면 콘솔에 숫자를 입력하라는 안내 메시지가 표시됩니다.

import java.util.Scanner;
public class Sum{
    public static void main(String args[]){
        int my_input, my_result;
        System.out.println("Required packages have been imported");
        Scanner my_scanner = new Scanner(System.in);
        System.out.println("A reader object has been defined ");
        System.out.print("Enter the number : ");
        my_input = my_scanner.nextInt();
        my_result = digitSum(my_input);
        System.out.println("The Sum of digits of " + my_input + " is " + my_result);
    }
    static int digitSum(int n){
        if (n == 0)
            return 0;
        return (n % 10 + digitSum(n / 10));
    }
}

출력

Required packages have been imported
A reader object has been defined
Enter the number : 12131415
The Sum of digits of 12131415 is 18

예제 2: 미리 정의된 값 사용

이번에는 정수 값이 코드 내에 미리 정의되어 있으며, 해당 값을 읽어와 콘솔에 결과를 출력합니다. 별도의 사용자 입력 없이 로직을 빠르게 확인하고 싶을 때 유용한 방식입니다.

public class Sum{
    public static void main(String args[]){
        int my_input = 12131415;
        System.out.println("The number is defined as : " +my_input);
        int my_result = digitSum(my_input);
        System.out.println("The Sum of digits of " + my_input + " is " + my_result);
    }
    static int digitSum(int n){
        if (n == 0)
            return 0;
        return (n % 10 + digitSum(n / 10));
    }
}

출력

The number is defined as : 12131415
The Sum of digits of 12131415 is 18

재귀 함수의 동작 원리

위 코드의 핵심인 digitSum 함수는 다음과 같은 방식으로 작동합니다.

n % 10은 숫자의 마지막 자릿수를 추출하고, n / 10은 마지막 자릿수를 제거한 나머지 값을 반환합니다. 이 과정을 숫자가 0이 될 때까지 반복하면서 각 자릿수를 더하게 되며, n == 0이라는 기저 조건에 도달하면 재귀 호출이 종료되고 지금까지 누적된 합이 최종 결과로 반환됩니다.