想测试下递归和非递归运行效率的差异,因此我把八皇后以同样算法用递归和非递归实现了一遍,测试结果如下:
问题规模较小时非递归效率稍高,但规模一大就完了。。
递归与非递归相比,递归的优点有:代码简洁,可阅读性强。递归缺点,浪费空间。
测试的代码,比较简单:
#include<iostream> #include<time.h> using namespace std; int s=0,n; 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