피보나치수열 구현 못하면 문제가 있는거겠죠??
861
작성한 질문수 35
사실 제귀함수 자체를 이해하기까지도
어려웠습니다..
그래도 이해하고 피보나치 수열을 구현하려 생각을 해봐도
x + y = z 에서 y와 z값을 앞으로 밀면 될꺼같은데
이 부분에서 막혔습니다..
코드 3개정도를 생각하고 해봤지만 다른값이 나오고
결국 다른사람의 코드를 봤습니다..
그럼에도 완벽하게 이해는 못했지만
작동원리는 알겠습니다..
n-1 + n-2 = n
막상 보고나니 머리가 멍해집니다..
제가 더 생각해본다고 답이 나왔을꺼란 생각은 안들기도 하고..
지금 제 수준 문제가 많은거겠죠??
남들보다 안좋은 머리로 생각한다고 하는데
결국 0+0= 0인가 봅니다..
그래도 계속 하고싶습니다..
그래서 공부 방법에 대해 질문이 있습니다
지금같이 생각을 계속 해봐도 도저히 안될떄
남의 코드를 보고 작동원리를 이해하는건 괜찮을까요??
물론 계속 써봐야지 실력이 느는건 알겠는데
저처럼 머리가 나쁜 상태로 생각을 한다고
도저히 답에 근접할지가 의문입니다..
그럼에도 생각을 해야 한다는건 동의하는데
그 생각하는거에 시간을 정해두고 그 시간안에
못푼다고 할떄 다른 이에 코드를 보고 공부하다보면
기초적인 부분이 지나고 지식이 쌓이다보면
자연스럽게 모르는 부분이 나왔을떄
답이 나올떄까지 생각을 하는것도
가능하지 않을까 싶어서요..
안좋은 공부법일까요??
답변 1
3
너무 자책하지 마세요! 재귀적인 개념 자체가 원래 어려운 것이 맞습니다. 처음 접하면 이해가 어려운 것이 당연해요!
재귀 함수를 사용하는 코드를 수 없이 많이 짜 본 저조차도 아직도 어렵고 헷갈립니다..ㅋㅋㅋ
이해를 위한 공부 팁을 좀 드리자면..
1. 그림으로 이해하세요.

(출처 : https://shoark7.github.io)
2차원 배열같은거 글이나 코드보단 그림으로 이해하는 것이 훨씬 쉽다는거 질문자님께서도 공감되실거에요.
재귀도 마찬가집니다. 재귀 함수가 어떻게 돌아가는지도 그림을 참고해보면 이해하기 더 수월해요. 그림을 직접 그려보시는 것도 도움이 되구요.
위 그림은 피보나치 수열의 함수 호출 방식을 구조적으로 나타낸 것입니다.
피보나치 점화식 보면 아시겠지만 7번째 피보나치 수열을 구하려면 6번째 피보나치 수열과 5번째 피보나치 수열을 알아야 한다는 전제가 따릅니다.
즉, 7번째 피보나치 수열을 구하는 함수 fib(7) 을 호출하면 그 안에서 fib(6) + fib(5) 이렇게 두 번의 함수를 또 호출해야 한다는 얘기가 됩니다. 이게 재귀함수 방식이에요! 재귀함수는 똑같은 동일한 함수를 내부에서 또 호출하고 또 호출하고 이런거라고 생각하시면 돼요!
2. 알고리즘 공부를 병행해보세요
재귀적인 개념은 알고리즘과 관련이 매우 깊습니다.
DFS, 백트래킹, union-find, 트리 등등 이런 자료구조/알고리즘들은 모두 재귀함수를 사용해서 구현합니다.
알고리즘 책 그림도 잘 되어 있고 설명 정말 친절해요. 알고리즘 책에서 재귀 개념을 사용하는 여러 알고리즘 설명도 읽어보시면서 재귀 개념을 익혀보시기를 권장합니다.
3. 디버깅을 무조건 하세요.
재귀 함수를 이해하는데 디버깅만한게 없다고 생각합니다.
피보나치 재귀함수 코드 작성해보시고 한줄 한줄 디버깅해보세요. 호출 스택 참고하시면서요!!
디버깅 너무 중요합니다. ㅠㅠㅠㅠㅠ 어차피 개발 하시게 되면 디버깅은 무조건 필수이니 미리 배워두시고 재귀함수 코드 디버깅 돌려보세요.
말씀하신 것처럼 남의 코드 많이 보는것도 도움 많이 됩니다.
절대 자책하지마세요!!!!! 어려운게 당연한거에요. 화이팅~!
(혹시 피보나치 수열인 An-1 + An-2 = An 이 점화식이 이해가 안되시는거라면... 이건 이해가 필요하다기보단 그냥 이런 식의 규칙을 가진 수열을 피보나치 수열로 부르자~라는 것 뿐입니다. 이해가 필요한 부분은 아니에요..! 피보나치 수열은 이렇게 생겻구나 하는 암기에 가깝습니다.)
0
정말 감사합니다 ㅠ
혹시 지금 제가하는 공부법은 c++를 이해하기 위해선 별로일까요??
어떤분들은 머리속의 생각을 코드화하는걸
자연스럽게 하기 위해선
답이 나올떄까지 생각하는걸 많이 해야한다곤 하는데
지금 상태로 답이 나올떄까지 몇시간 몆 일 이고 생각하는게
더 좋은 방법일까요??
변수가 메모리에 저장되는 것을 알려주는 강의가 어떤강의였죠
1
481
1
메모리 주소 10진수로 출력
1
672
1
클래스 템플릿 특수화에서 boolalpha로 표현된 리턴값에 대해 질문이 있습니다.
1
515
1
여러가지 리턴 타입에 관한 강의가 어떤 걸까요?
1
550
1
메모리 주소에 관한 질분
0
688
1
인터페이스 클래스에서 reportError의 매개변수에 대해 궁금한 것이 있습니다.
0
558
1
형변환 오버로딩에서 const 관련 질문이 있습니다.
0
449
1
Digit 뒤에 reference를 사용하는 이유
0
512
1
4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결
0
326
1
dat파일이...
0
540
1
TODO:대입 연산자 오버로딩에 대한 소스코드입니다.
0
652
1
복사 생성자 관련 질문이 있습니다.
0
457
1
수업 중 궁금한점이 있습니다.
1
392
1
라이브러리자체가 이해가 되지 않습니다.
0
566
1
마지막 예제 질문
0
306
1
증감연산자 위치에 따른 수행 순서 질문입니다.
0
382
1
단항 연산자 오버로딩에서 return 부분에 질문이 있습니다.
1
416
1
friend함수 관련 질문이 있습니다.
0
313
1
operator+ 정의부분에서 궁금한 것이 있습니다.
0
449
1
3분 17초 질문
0
354
1
함수에 값을 대입한다는 개념이 이해가 되지 않습니다.
0
450
1
int getvalue() const에서 const는 왜 뒤에 붙는건가요?
0
454
2
const Something &st에서 const를 빼면 안되나요?
0
305
1
friend함수는 다른 클래스의 멤버함수로 쓸 수 없나요??
1
496
1





