#include<iostream>
using namespace std;
//
// recursive version one -- ok
// 순환호출을 사용했지만 빠르게 동작함
//
int jos1(int n) {
int x;
if(n==1) return 1;
x=jos1(n-1);
if(x==n-1) return 2;
if(x==n-2) return 1;
return x+3;
}
//
// recursive version two -- bad
// 프로그램을 잘못 짜면 아래와 같이 될수도 있슴
// 아주 오래 오래 돔
//
int jos2(int n) {
int i, x;
if(n==1) return 1;
for(i=2;i<n+1;++i) {
x=jos2(i-1);
if(x==i-1) x=2;
else if(x==i-2) x=1;
else x=x+3;
}
return x;
}
//
// non recursive version of josephus
// 순환호출을 사용할 필요가 없슴
//
int jos3(int n) {
int i, x=1;
for(i=1;i<n;++i) {
if(x==i) x=2;
else if(x==i-1) x=1;
else x=x+3;
}
return x;
}
int main() {
int i,x,y;
cout<<"Enter number:";
cin>>x;
for(i=1;i<x+1;++i) {
y=jos1(i);
cout<<y<<" ";
}
cout<<endl;
for(i=1;i<x+1;++i) {
y=jos3(i);
cout<<y<<" ";
}
cout<<endl;
for(i=1;i<x+1;++i) {
y=jos2(i);
cout<<y<<" ";
}
return 0;
}
'알고리즘, 자료구조 > 자료구조' 카테고리의 다른 글
순열 permutation (0) | 2012.03.27 |
---|---|
순환호출 (재귀호출) - 기초1 설명 (0) | 2011.12.13 |
순환호출 (재귀호출) 기초3 (0) | 2011.12.10 |
순환호출 (재귀호출) 기초2 (0) | 2011.12.03 |
순환호출 (재귀호출) 기초 1 (0) | 2011.12.03 |