이번 Recursive call을 이용해서 입력된 별의 개수에서 한 줄 씩 별의 개수를 줄여나가는 함수와 피보나치 수열의 뺄셈 버전의 함수를 만드는 것이 이번 과제문제였다. 그러므로 피보나치 수열의 원리 단계를 보여주고 있는 그림을 보며fib(k-2)-fib(k-1)의 수학 공식을 도출하게 되었다.
#include <stdio.h>
void drawing_star(int n)
{
if (n <= 0)//n<=0 이면
{
printf("\n");
return;
}
else {//n>0
printf("*");//별 출력
drawing_star(n - 1);//재귀함수 호출부분
}
}
void draw_star(int n)
{
if (n <= 0)//n<=0이면
{
printf("\n");
return;
}
else {
drawing_star(n);//darawing star 함수 호출
draw_star(n - 1);//draw+star에서 n-1
}
return;
}
int fib(int k) {
if (k == 0) {//k==0이면
return 0;
}
if (k == 1)//k==1이면
return 1;
int result = fib(k - 2) + fib(k - 1);//재귀함수 호출 부분
return result;
}
void print_fib(int n) {
if (n == 0) {//n이 0이면
printf("0");//0출력
return;
}
else {
fib(n);//fib 함수 호출
printf("%d", fib(n));//리턴 값 출력
print_fib(n - 1);//print_fib에서 n-1
printf("\n");
}
}
int main(int argc, int *argv[])
{
draw_star(5);
print_fib(4);
return 0;
}
-(조건 2) 만약 draw_star와 drawing_star의 n의 값이 0과 같거나 작으면 줄바꿈 후 리턴해준다.
이번 Recursive call을 이용해서 입력된 별의 개수에서 한 줄 씩 별의 개수를 줄여나가는 함수와 피보나치 수열의 뺄셈 버전의 함수를 만드는 것이 이번 과제문제였다. 나는 Recursive call(재귀함수 호출)을 이용한 2번째 퀴즈를 풀면서 재귀함수 호출에 대한 기본적인 호출 방법과 작동원리와 순서를 이해하였지만 이를 구현하는 새로운 함수를 만드는 것이 어려움이 있었고, 결국 시간내에 퀴즈를 풀지 못했다. 그래서 이번 퀴즈를 풀기 위해서 순환 호출하는 ¨알고리즘이나 함수가 수행 도중에 자기 자신을 다시 호출하여 문제를 해결하는 작동기법 원리에 대해 다시 살펴보고, 함수에 대한 개념을 다졌으며, 피보나치 수열의 원리 단계를 학습자료 ppt에 나와있는 그림을 보며 처음에 fib(k)-fib(k-1)이라는 잘못된 식에서 위에 코드에 나와있는 fib(k-2)-fib(k-1)의 수학 공식을 도출하게 되었다. 나는 이 퀴즈를 풀면서 C언어에서 부족한 함수의 작동 원리에 대한 이해가 부족하다고 느끼게 되었고, 수업시간에 배운 순환 호출에 대한 이해가 덜 되었다고 생각하였으며, 피보나치 수열의 원리에 대해 개념이 덜 잡힌채로 퀴즈에 임하게 되었다고 생각하였다. 이제 앞으로 C언어에 대한 복습을 꾸준히하고 수업시간에 배운 새로운 함수 호출법이나 원리를 내것으로 만들어 퀴즈를 푸는 시간 안에 퀴즈를 풀 수 있도록 준비를 해야겠다고 생각한다.