새소식

💻 Computer/🐘 Algorithm

[Algorithm] Fibonacci

  • -

1. 정답만 보고 싶다면 <-- (클릭)

2. 잡담

 

 

여름이었다...

재귀 함수에 대해 공부하다가 FIbonacci를 보았고 백준에 있는 문제를 풀어보았다 10870번

 

일단 최대한 고민해보며 재귀 함수를 어떻게 사용할까 생각하며 풀었다

 

고민의 흔적을 증거로 제출하겠다

고민의 흔적들

그래서 어떻게 풀었는데?
def Fibo(n, f1, total):
    if n > 0:
        print(n, f1, total)
        return Fibo(n-1, total, total+f1)
    else:
        return total

print(Fibo(int(input()), 1, 0))

재귀 함수를 공부하며 꼬리 재귀 함수를 알게 되었고 어떻게 응용할 수 없나 고민하다 만들어 버렸다

 

 

그런데 큰 문제가 생겼다 내가 풀었지만 내가 잘 모르겠다.... 큰일이다....

코드를 적으면서 어 될 것 같은데??라는 생각을 하며 적어 내려갔다 근데 진짜 됐다 

 

이럴 때가 제일 난감하다  내가 쓴 코드를 이해하지 못하면 난 잠을 잘 수가 없다 

 

설명할 것들 리스트

1.  코드 1번 줄부터 마지막 줄까지 이 줄을 사용한 이유를 설명하라

 

 

#1 다시 돌아왔다 

 

그림 1

일단 답은 다 맞게 나오긴 한다 100을 입력하면 354224848179261915075가 잘 나온다

근데 도저히 이해를 못 하겠다 내가 뭘 갑자기 생각해서 저런 코드가 나왔는지....

 

# 2 다시 돌아 왔다

뮈첬다 이해해 버렸다

그림 2

이런 식으로 재귀가 일어나 나는데 [그림 1]을 다시 보고 와주면 좋겠다!!

 

이 재귀는 처음 함수를 시작하는 부분이 시작이 아니라 두 번째 즉 

인자 값으로 (n = 4, F1 = 0, Total = 1)이 들어왔을 때부터 그림 2의 순서가 나온다

 

그럼 이런 질문이 나올 수 있다

"왜 함수 첫 번째부터 시작하는 게 아니죠?"

나도 모르겠.... 다

왜 이런 코드가 갑자기 툭 나온 걸까......

 

#3 다시 왔다
def Fibo(n, f1, total):
    if n > 1:
        print(n, f1, total)
        return Fibo(n-1, total, total+f1)
    else:
        return total

print(Fibo(int(input()), 0, 1)) # <-- (1,0) 에서 (0, 1)로 바꿈
#그럼 처음 부터 됨

이렇게 하면 처음부터 간다

'💻 Computer > 🐘 Algorithm' 카테고리의 다른 글

[Algorithm] 백준 2581 소수  (0) 2022.08.12
[Algorithm] 2839 설탕 배달  (0) 2022.08.11
[Algorithm] 백준 1193 분수찾기  (0) 2022.08.05
[Algorithm] 백준 1712 - 손익분기점  (0) 2022.08.04
[Algorithm] 백준 1316  (0) 2022.08.03
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.