[알고리즘] 순환(Recursion) 02

1 minute read

순환(Recursion)

인프론 강의를 보면서 연습하고 기록하고 있습니다

문자열의 길이 계산

public class Test {
	public static void main(String[] args) {
		System.out.println("문자열의 길이 : "+length("abc"));
	}

	public static int length (String str) {
		if(str.equals("")) {
			return 0;
		}else {
			System.out.println(str);
			return 1+length(str.substring(1));
		}
	}
}
abc
bc
c
문자열의 길이 : 3

문자열의 프린트

public class Test {
	public static void main(String[] args) {
		printChars("PRINT");
	}

	public static void printChars (String str) {
		if(str.length()==0) {
			return;
		}else {
			System.out.println(str.charAt(0));
			printChars(str.substring(1));
		}
	}
}
P
R
I
N
T

문자열 뒤집어 프린트

public class Test {
	public static void main(String[] args) {
		printCharsReverse("ABCDE");
	}

	public static void printCharsReverse (String str) {
		if(str.length()==0) {
			return;
		}else {
			printCharsReverse(str.substring(1));
			System.out.println(str.charAt(0));
		}
	}
}
E
D
C
B
A

2진수로 변환하여 출력

public class Test {
	public static void main(String[] args) {
		printInBinary(2);
	}

	public static void printInBinary (int n) {
		if(n<2) {
			System.out.print(n);
		}else {
			printInBinary(n/2);
			System.out.print(n%2);
		}
	}
}
10

배열의 합 구하기

public class Test {
	public static void main(String[] args) {
		int[] data = {1,2,3};
		System.out.println("배열의 합 : " + sum(data.length, data));
	}

	public static int sum (int n, int[] data) {
		if(n<=0) {
			return 0;
		}else {
			//data[0]에서 data[n-1]까지의 합을 반환
			System.out.println(data[n-1]);
			return sum(n-1, data) + data[n-1];
		}
	}
}
3
2
1
배열의 합 : 6

데이터파일로 n개의 정수 읽어오기

//Scanner in이 참조하는 파일로부터 n개의 정수를 입력받아
//배열 data[0],....,data[n-1]에 저장
public static void readFrom (int n, int[] data, Scanner in) {
	if(n==0) {
		return;
	}else {
		readFrom(n-1, data, in);
		data[n-1] = in.nextInt();
	}
}