본문 바로가기

재귀호출3

3n+1 문제 (The 3n+1 Problem) /* * 어떤 수열을 만들어내는 다음과 같은 알고리즘을 생각해보자. 어떤 정수 n에서 시작해 n이 짝수면 2로 나누고, 홀수면 3을 곱한 다음 1을 더한다. * 이렇게 해서 새로 만들어진 숫자를 n으로 놓고 n=1이 될 때까지 같은 작업을 반복한다. 예를 들어, n=22이면 다음과 같은 수열이 만들어진다. * * 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 * * 아직 증명 되진 않았지만 모든 정수 n에 대해 이 알고리즘을 적용시키면 결국에는 n=1에 이르게 되는 것으로 추측된다. 그리고 이 가설은 적어도 * 1,000,000까지의 정수에 대해서는 참이다. * * n이라는 값이 입력되었을 때 1이 나올 때까지 만들어진 수의 개수(1을 포함)를 n의 사이클 길이(cycle-.. 2011. 4. 28.
간편간편 열매 먹은 TreeView 검색함수 [재귀호출] //TreeView의 검색 public TreeNode SearchNode(TreeNodeCollection aNodes, string strKey) { foreach ( TreeNode node in aNodes ) { if ( node.Text.Contains(strKey) ) return node; TreeNode findNode = SearchNode(node.Nodes, strKey); if ( findNode != null ) return findNode; } return null; } 2010. 7. 2.
동적알고리즘(재귀적 알고리즘)을 구현하는데 있어서 1. 해결하고자 하는 알고리즘의 전체를 파악한다. 예를 들어 피보나치 수열을 구하고자 할 때 첫째항과 둘째항은 항상 1이고 n번째 항은 n-1항과 n-2항의 합이라는 성질을 파악해야한다. 2. 성질을 파악한 뒤 일반화된 식을 세워본다. 팩토리얼을 예로 들면 5! = 5*4*3*2*1 이라는 것에서 n! = n*n-1*n-2...*1이라는 것을 유추할 수 있고 깊숙이 파고들면 n! = n * (n-1) != n * (n-1) * (n-2) !라는 성질을 알 수 있다. 머릿속으로 생각 할 수 있어도 한번쯤은 확실히 적어본다. 3. 그 다음 조건문을 이용하여 초기화를 끝낸다. 4. 초기화가 끝났다면 유추해낸 식을 이용하여 전체식을 구성한다. 참고로 재귀호출은 재귀호출을 사용하지 않은 더 자세한 구현보다 효율이.. 2009. 9. 8.