HW4_5_1에서의 get_cycle_number(int n) 함수를 순환을 이용하여 작성하고 main함수로 테스트하라.
- get_cycle_number 함수 안에서 지역변수를 사용하지 말라.
예시)
HW4_5
5 <- 입력
5 16 8 4 2 1
6
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
26
27
28
29
|
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int length=0;
int get_cycle_number(int n);
int main(void)
{
int number;
printf("숫자를 입력하세요:");
scanf("%d", &number);
printf("\n%d", get_cycle_number(number));
return 0;
}
int get_cycle_number(int n)
{
printf("%d ", n);
if (n == 1)
return length+1;
else if (n % 2 == 0) {
length++;
return get_cycle_number(n / 2);
}
else {
length++;
return get_cycle_number(3 * n + 1);
//length++;//return 이후의 코드는 실행되지 않는다
}
}
|
cs |
처음에 return뒤에 코드를 적었는데 return문 뒤의 코드는 실행되지 않으니 return앞으로 코드를 옮겨주었다
n이 1인경우는 거기서 코드가 끝나니 길이인 length를 반환해주면 된다
이거 문제 의도가 전역변수를 사용하는 것이 아닌 그냥 추가 변수를 사용하지 말라는 의미였다고 한다
이렇게 하면 된다
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
26
|
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int get_cycle_number(int n);
int main(void)
{
int number;
printf("숫자를 입력하세요:");
scanf("%d", &number);
printf("\n%d", get_cycle_number(number));
return 0;
}
int get_cycle_number(int n)
{
printf("%d ", n);
if (n == 1)
return 1;
else if (n % 2 == 0) {
return get_cycle_number(n / 2)+1;
}
else {
return get_cycle_number(3 * n + 1)+1;
}
}
|
cs |
그럼 예를 들어
5를 입력하면
g(5)
1+g(16)
1+g(8)
1+g(4)
1+g(2)
1+g(1)
이고 g(1)=1이다.