/*1)递归的基本思想:把规模大的问题转化为规模小的
相似的子问题来解决。在函数实现时,因为解决大问题
的方法和解决小问题的方法往往是同一个方法,所以就
产生了函数调用它自身的情况。另外这个解决问题的函
数必须有明显的结束条件,这样就不会产生无限递归的
情况了。
2)三个要素:
递 + 结束条件 + 归。
3)递归的基本步骤:(形象理解)你打开面前的门,看到屋里还有门
(这门可能跟前面打开的门一样大小(静),也可能门
小了些(动)),你走过去,发现手中的钥匙还可以打
开它,你推开门,发现里面还有一扇门,你继续打开,
。。。, 若干次之后,你打开面前一扇门,发现只有一
间屋子,没有门了。 你开始原路返回,每走回一间屋子,
你数一次,走到入口的时候,你可以回答出你到底用这
钥匙开了几扇门。*/
/*#include <iostream>
using namespace std;
void hanoi(int n,char src,char mid,char dest);
int main()
{
int n;
cin>>n;
hanoi(n,'a','b','c');
return 0;
}
void hanoi(int n,char src,char mid,char dest)
{
if(n==1)
{
cout<<src<<"->"<<dest<<endl;
return;
}
hanoi(n-1,src,dest,mid);
cout<<src<<"->"<<dest<<endl;
hanoi(n-1,mid,src,dest);
return ;
}*/
#include <iostream>
#include <cmath>
using namespace std;
int n;
int queenpos[100];
void nqueen(int k);
int main()
{
cin>>n;
nqueen(0);
return 0;
}
void nqueen(int k)
{
int i;
if(k==n)
{
for(i=0;i<n;i++)
{
cout<<queenpos[i]+1<<" ";
}
cout<<endl;
return ;
}
for(i=0;i<n;i++)
{
int j;
for(j=0;j<k;j++)
{
if(queenpos[j]==i||abs(queenpos[j]-i)==abs(k-j))
{
break;
}
}
if(j>=k)
{
queenpos[k]=i;
nqueen(k+1);
}
}
}
递归
最新推荐文章于 2024-05-27 09:55:54 发布