순환(recursion), 또는 재귀 호출이란 어떤 알고리즘이나 함수가 자기 자신을 호출하여 문제를 해결하는 프로그래밍 기법이다.
예를 들어 정수의 팩토리얼(factorial)은 다음과 같이 정의된다.
위의 정의에서 factorial(n!)을 정의하는데 다시 factorial(n-1)!이 사용된 것에 주목하자. 이러한 정의를 순환적이라 한다.
#include<stdio.h> int factorial(int n){//순환적인 팩토리얼 계산 함수 if(n==1){// n==1일 경우 return 1; } else{//n>1일 경우 return (n*factorial(n-1)); } } int main(){ printf("5! : %d",factorial(5)); }
#include<stdio.h> int factorial_iter(int n){ int k, result=1; for(k=n;k>0;k--){ result *= k; } return result; } int main(){ printf("5! : %d",factorial_iter(5)); }
int fib(int n){//피보나치 수열의 순환적 호출 if(n==0) return 0; if(n==1) return 1; return (fib(n-1)+fib(n-2)); }
int fib_iter(int n){ int i,tmp,current,last; if(n<2) return n; else{ last=0; current=1; for(int i=2;i<=n;i++){ tmp = current; current += last; last = tmp; } return current; } }
#include<stdio.h> void hanoi_tower(int n,char from, char tmp, char to){ if(n==1){ printf("원판 1을 %c에서 %c로 옮긴다.\n",from,to); } else{ hanoi_tower(n-1,from,to,tmp); printf("원판 %d을 %c에서 %c으로 옮긴다.\n",n,from,to); hanoi_tower(n-1,tmp,from,to); } } void main(){ hanoi_tower(4,'A','B','C'); }