인자값에 따라 중첩반복의 깊이를 조절할수 있나요?

oppor의 이미지

C 언어나 파이썬에서
함수의 인자값에 따라
중첩반복의 깊이를 조절하게 프로그램을 짤수 있을까요?

5를 넣으면 5단계 중첩해서 반복하고
10을 넣으면 10단계로 중첩하구요.

이게 리스프에서 얘기하는 고차함수와 관계 있는 개념인가요?

HDNua의 이미지

1. 단계라는 게 이중 루프나 삼중 루프를 말씀하시는 것이라면, 재귀함수를 이용하면 된다고 생각합니다.

int func(int level, int count) {
  if (level > 0) {
    int i;
    for (i=0; i<count; ++i) {
      func(level-1, count); // level 회의 단계만큼 루프가 중첩
    }
  }
}

oppor님께서 이런 답변을 원하시는 것이 아니리라고 생각하지만 일단 달아봤습니다. 고차함수는 전혀 모르는 개념이네요.

저는 이렇게 생각했습니다.

oppor의 이미지

재귀는 잘 쓰질 않아서 몰랐는데
이런식으로 활용하면 되는거였군요.ㅎㅎ
조금 더 응용하면 각 반복의 단계마다 다른 알고리즘으로 반복하는것도 가능하겠네요.
빠르고 정확한 답변 감사드립니다.

익명 사용자의 이미지

HDNua님의 형태를 조금 일반화하면 '스택'을 이용하면 될 것이고,

문제가 단순한 경우에는 '일차 배열'의 단순한 연산 형태로 단순화시킬 수 있겠네요.

length = 6

0,0,0,0,0,0
0,0,0,0,0,1
0,0,0,0,0,2
...
9,9,9,9,9,9

를 반복하는 문제가 일차 배열을 이용해서 단순하게 구현되지만,

이걸 자세히 들여다 보면 스택의 원리가 내재되어 있으니까요.

( 캐리의 개념이 스택의 pop - push, 재귀 호출의 return - recall 을 단순화시킨 것으로 볼 수 있음 )

===

http://cafe.daum.net/codeinside