想测试下递归和非递归运行效率的差异,因此我把八皇后以同样算法用递归和非递归实现了一遍,测试结果如下:
问题规模较小时非递归效率稍高,但规模一大就完了。。
递归与非递归相比,递归的优点有:代码简洁,可阅读性强。递归缺点,浪费空间。
测试的代码,比较简单:
void queen() /*n皇后非递归*/
{
int i,p=0,*loca=new int[n];
memset(loca,0,sizeof(int)*n);
while(p>-1)
{
for(;loca[p]<n;)
{
if(p==n)
{
s++; p--; loca[p]++; continue;
}
for(i=0;i<p&&abs(loca[i]-loca[p])!=p-i&&loca[i]!=loca[p];i++);
if(i==p)
{ p++; continue; }
loca[p]++;
}
loca[p]=0;
p--;
loca[p]++;
}
}
void queen1(int deep,int loca[]) /*n皇后递归*/
{
if(deep==n)
{ s++; return ; }
for(loca[deep]=0;loca[deep]<n;loca[deep]++)
{
for(int i=0;i<deep&&loca[i]!=loca[deep]&&abs(loca[i]-loca[deep])!=deep-i;i++);
if(i==deep)
queen1(deep+1,loca);
}
}
int main()
{
int a[200],b;
while(cin>>n&&n)
{
s=0;
b=clock();
queen();
cout<<"非递归找到"<<s<<"组解,用时:"<<clock()-b<<endl;
s=0;
b=clock();
queen1(0,a);
cout<<"递归找到"<<s<<"组解,用时:"<<clock()-b<<endl;
}
return 0;
}
测试环境
CPU: P4 2.93G
MEM: 1G DDR
OS : WIN XP
IDE : VC++ 6.0