프로그래밍과 잡담

재귀 함수. 본문

프로그래밍/C,C++, Win32Api

재귀 함수.

크레온 2009. 12. 24. 01:21
전에도 했지만...추가적인것..
파이선 코드다..
보면 알겠지만.. C하고 그다지 차이 않난다.
다만 C처럼 데이터타입을 쓰지 않는다는것.

def는 함수 사용할때 사용한다. 그거 말고도 사용하는거 같은데.. 파이선은 나도 공부하는 중이라서...
range() 함수는 인자가 1, k+1이라고 되었는데.. 1부터 k 까지라는 뜻이다.
그리고 파이선은 { 이거 안쓴다.  텝으로 정한다. 함수 안에 들어갔으면 그 함수에 있는 거고 밖에 있으면 그 함수에 없는거다.
def t():
    a= "hello";  // 변수

str = "hello";  //t() 함수 변수 아님
파이선 설명은 이쯤이면 됬고.. 일반적인 for 문으로 만든 팩토리얼 함수.
def Factorial(k):
    r =1;
    for i in range(1,k+1):
        r = r * i
    return r;
재귀적으로 만든 함수..
def recursive_Factorial(k):
    if k == 1:
        return 1;
    else:
        return k * recursive_Factorial(k-1);


재귀 함수가 짜증나는 이유는 자신을 계속 부르기때문에 값이 어떻게 된것인지 햇갈리는 경우가 있다.
그리고 리턴이 어떻게 되는지도 햇갈리는 경우가 생긴다.

그럴때는 그림판을 키고 어떻게 움직이는지를 보면 쉽게 알 수 있다.




그림이 좀 구린데.. 뭐 어찌됬든 간에..

파란색 선은  함수를 불러서 안으로 들어갔다는 표시이다.
검은색 숫자는 K의 값을 의미한다.
붉은색 선은  함수가 끝나고 자신을 부른 곳으로 되돌아간것을 표시하는것이다.
붉은색 숫자는 리턴된 값이다.

스택으로 표현하면..

[Recursive_Factorial(1)] - 0x5000
[Recursive_Factorial(2)] - 0x4000
[Recursive_Factorial(3)] - 0x3000
[Recursive_Factorial(4)] - 0x2000
[Recursive_Factorial(5)] - 0x1000
=======================  스택
실제로도 시스템 스택에는 이런식으로 쌓인다..

나는 재귀함수를 그다 좋아하지 않는다.. 이유는 보기가 너무 짜증난다.
모든 재귀는 반복문으로 해결이 가능하다.

뭐 재귀가 더 쉽게 되면 재귀를 쓰면 좋겠지만.. 어려운경우 재귀를 써가지고 눈깔 아프게 할 필요는 없다고 본다.

전에 포스팅했던 페이지로 가기



반응형

'프로그래밍 > C,C++, Win32Api' 카테고리의 다른 글

[C++]템플릿 만들어보기..  (0) 2010.04.09
[C++] Class  (0) 2010.01.13
[자료구조]이중 연결리스트  (0) 2009.10.02
[자료구조] 단순 연결 리스트  (0) 2009.09.22
winsock 사용시 에러..  (0) 2009.08.11
Comments