递归可以解决的问题有:
- 可分解的问题(汉诺塔)
- 多重循环或循环层数不确定的问题(n皇后问题)
- 递归定义的问题(逆波兰表达式)
汉诺塔问题
#includeusing namespace std; void f(char a,char b,char c,int n){ if(n==0) return ; f(a,c,b,n-1); cout<"< >num; f('A','B','C',num); }
8皇后问题
#include#include using namespace std; int num=0;int q[95][8];int row[8]; void queen(int i){//考虑第k个皇后 if(i==8){ for(int k=0;k<8;k++){ q[num][k]=row[k]+1;//最后解有num个 } //问题规模的变化+出口 num++;//!放到循环外部 return ; } int k=0;int j=0; for(j=0;j<8;j++){ for( k=0;k>n; queen(0); //cout<<8<<"皇后问题"< >num; for(int k=0;k<8;k++){ cout< 1.使用递归函数一定要注意递归:规模变换+函数出口
2.abs在头文件#include< cmath >
3.确定第i行第j列放皇后做条件判断时一定不要混淆各个变量的含义
4.注意循环的层数,实现逻辑逆波兰表达式
#include#include #include using namespace std; double exp(){ char s[20];//string s scanf("%s",s); switch(s[0]){ case'+':return exp()+exp();//后递归的符号后计算 case'-':return exp()-exp(); case'*':return exp()*exp(); case'/':return exp()/exp(); default:return atof(s);//不是符号直接转为数 //break; } } int main(){ cout< 使用atof()将字符串转为double
问题:不知道为什么格式化lf输出,为int值的时候-0.000000;



