> For the complete documentation index, see [llms.txt](https://jinwon-yoon.gitbook.io/jinonys-blog/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jinwon-yoon.gitbook.io/jinonys-blog/daily-log/2022.12.10.md).

# 2022.12.10

일일 회고 115일차

## 할일 및 한일&#x20;

* [x] 자료구조 8장(재귀 호출) 마무리&#x20;
* [ ] Java 세미나 마무리 프로젝트 시작&#x20;

## 경험 및 배움&#x20;

오늘은 컨디션이 좋지 않아서 자바 프로젝트는 월요일로 미뤄야할 것 같다.

### 자료구조 8장(재귀 호출) 마무리

**재귀 호출과 반복 호출**에 대해 학습해보았다.

반복 호출과 비교하여 재귀 호출이 가지는 가장 큰 장점은 **알고리즘의 간결성과 명확성으로, 반복 호출에 비해 훨씬 명확하고 간결**하다. 하지만 단점으로는 **시스템 스택을 사용하므로 수행 시간이 더 오래 걸리며, 스택 메모리 문제가 발생할 수 있다**는 단점이 있다.

재귀와 반복은 서로 변경해서 구현할 수 있는데, 꼬리 재귀 호출일 경우 쉽게 반복 호출로 변경할 수 있다고 한다.

다음은 재귀 호출 방식으로 구현한 피보나치 수열 함수이다.

```c
int fib(int n) {
    int ret = 0;

    if (n == 0) {
        ret = 0;
    } else if (n == 1) {
        ret = 1;
    } else {
        ret = fib(n - 1) + fib(n - 2);
    }

    return ret;
}
```

위의 코드를 반복 호출 방식으로도 변경할 수 있다.

```c
int fib_iter(int n) {
    int ret = 0;

    if (n < 2) {
        ret = n;
    } else {
        int i = 0, temp = 0, current = 1, last = 0;

        for (i = 2; i <= n; i++) {
            temp = current;
            current += last;
            last = temp;
        }

        ret = current;
    }

    return ret;
}
```

자세한 정리 내용은 학습하여 정리한 링크를 첨부한다.

{% embed url="<https://jinwonyoon.notion.site/Chapter-8-e909240387db434cabe089babece86da>" %}

## 개선 및 목표&#x20;

* 월요일이 이번 학기 마지막 시험이다. 내일만 전공 공부에 시간을 투자하자!&#x20;
