Week 2-1 : How to code Recursive function2
Tutoring/18-1 DS2018. 4. 4. 00:38
<180403>
1) 배열의 요소들 중 두번째 최대값 구하기.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <stdio.h> int max; int f2(int arr[], int n) { int k; if(n == 1) { max = arr[n] > arr[n-1] ? arr[n] : arr[n-1]; return arr[n] > arr[n-1] ? arr[n-1] : arr[n]; } k = f2(arr, n-1); if(arr[n] < k) return k; if(arr[n] > max) { int t=max; max=arr[n]; return t; } return arr[n]; } int main() { int arr[] = {50, 10, 2, 30, 11, 33}; printf("%d\n", f2(arr, 5)); return 0; } | cs |
>> n 은 마지막 인덱스
>> 12 : k 에는 n-1번째 요소들까지에서의 두번째 최대값이 저장된다.
>> 14 : n번째 요소가 두번째 최대값보다 작은 경우.
>> 15 : n번째 요소가 최대값인 경우, 기본의 max값이 두번째 최대값이 된다.
>> 16 : 나머지 경우(n번째 요소가 두 번째 최대값)
2) 팰린드롬인지 판단한는 함수 재귀함수로 구현하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h> #include <string.h> int isP(char str[], int s, int e) { if(s >= e) return 1; return str[s]==str[e] ? isP(str, s+1, e-1) : 0; } int main() { char str[100]; scanf("%s", str); isP(str, 0, strlen(str)-1) ? puts("True") : puts("False"); return 0; } | cs |
>> 첫번째 인덱스와 마지막 인덱스의 문자가 같을때, 그 안의 문자열이 팰린드롬이면 팰린드롬이다.
>> noon, eye, 다시합창합시다 와 같은 문자열은 모두 팰린드롬이다.
3) 하노이 타워 이동 순서.
- Hanoi(n, from, by, to) : n개의 쟁반을 from 에서 by를 거쳐 to로 옮기는 과정을 출력하는 함수.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <stdio.h> void Hanoi(int n, char from, char by, char to) { if(n == 1) { printf("%d번 쟁반을 %c에서 %c로 이동.\n", n, from, to); return ; } Hanoi(n-1, from, to, by); printf("%d번 쟁반을 %c에서 %c로 이동.\n", n, from, to); Hanoi(n-1, by, from, to); } int main() { Hanoi(3, 'A', 'B', 'C'); return 0; } | cs |
>> A 에 있는 n 개의 쟁반을 C에 옮기려고 함.
>> A 에 있는 n개의 쟁반들 중, n-1개의 쟁반을 B에 옮기고,
>> A 에 있는 n번째 쟁반을 C로 옮긴다.
>> 그런다음 B 에 옮겨놨던 n-1개의 쟁반을 C로 옮기면 된다.
>> A 에 있는 쟁반들 중, n-1개의 쟁반을 B에 옮기는 과정을 출력하고,
>> A 에 있는 n번째 쟁반을 C로 옮긴다.
>> 그런다음 B 에 옮겨놨던 n-1개의 쟁반을 C로 옮기는 과정을 출력한다.
>> 실행결과
1 2 3 4 5 6 7 | 1번 쟁반을 A에서 C로 이동. 2번 쟁반을 A에서 B로 이동. 1번 쟁반을 C에서 B로 이동. 3번 쟁반을 A에서 C로 이동. 1번 쟁반을 B에서 A로 이동. 2번 쟁반을 B에서 C로 이동. 1번 쟁반을 A에서 C로 이동. | cs |
4) 별찍는 순서.
4-1)
1 2 3 4 5 6 7 | void f(int n) { if(n == 0) return ; f(n-1); printf("*"); f(n-1); } | cs |
4-2)
1 2 3 4 5 6 7 | void f(int n) { if(n == 0) return ; f(n-1); f(n-1); printf("*"); } | cs |
4-3)
1 2 3 4 5 6 7 | void f(int n) { if(n == 0) return ; printf("*"); f(n-1); f(n-1); } | cs |
'Tutoring > 18-1 DS' 카테고리의 다른 글
Week 3-2 : Linked List (0) | 2018.04.15 |
---|---|
Week 3-1 : Linked List (0) | 2018.04.11 |
Week 2-2 : ArrayList (0) | 2018.04.05 |
Week 1-2 : How to code Recursive function (0) | 2018.03.30 |
Week 1-1 : C Lang review (0) | 2018.03.28 |