아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
고귀한오랑우탄112
고귀한오랑우탄11219.06.04

재귀 호출을 반복하는 함수에 대해 문의 드립니다.

아래 코드 중에서

return min(walk(n - 2) +1,walk(n - 3) + 1)

여기서 왜 +1을 하는 것인지 설명 부탁드립니다.

또, 재귀 호출 문이 두번씩이나 이루어지기도 하는데 아래 코드가 해석이 가능하신 답변자분 찾습니다.

#include <stdio.h>

int min(int x, int y)

{

if (x < y)return x;

return y;

}

int walk(int n)

{

if (n == 0) return 0;

if (n < 0 || n == 1) return 9999999;

return min(walk(n - 2) +1,walk(n - 3) + 1);

}

int main()

{

int n = 16;

printf("%d\n", walk(n));

return 0;

}

55글자 더 채워주세요.
답변의 개수
2개의 답변이 있어요!
  • #include <stdio.h>

    int min(int x, int y)

    {

    if (x < y)return x;

    return y;

    }

    int walk(int n)

    {

    if (n == 0) return 0;

    if (n < 0 || n == 1) return 9999999;

    return min(walk(n - 2) +1,walk(n - 3) + 1);

    }

    int main()

    {

    int n = 16;

    printf("%d\n", walk(n));

    return 0;

    }

    위 코드에서 +1을 하는 이유는 자기 자신을 호출 하기 위함입니다.

    재귀호출을 하는중 자신을 빼고 min(x,y) 가 호출 되기 때문에

    현재의 자신을 호출하기 위해 1을 더하게 됩니다.


  • 안녕하세요.

    재귀 알고리즘은 walk(n)은 n까지의 최소값을 얻는 호출입니다.

    walk(n - 2)는 n - 2까지의 최소 값을 구하는 거고,

    walk(n - 3)은 n - 3까지의 최소 값을 구하는 기능입니다.

    그리고 현재 n에서 n - 2와 n - 3에 각각 +1이 추가로 더해져야 n까지의 최소 값을 구할 수 있습니다.

    그래서 +1이 있어야 합니다.