递归_求阶乘_汉诺塔_N皇后_逆波兰表达式求值 记录

#include <iostream>
using namespace std;

/*
    001:阶乘
*/
int Factorial(int n)
{
    if (n == 0)
    {
        return 1;
    }
    else
    return Factorial(n - 1) * n;
}

/*
    002:汉诺塔

*/
//void Hanoi(int n, char start, char mid, char last)
//{
//    if (n == 1)
//    {
//        cout << start << "->" << last << endl;  //如果n为1,直接移到第三盘子里面
//        return;
//    }
//    Hanoi(n - 1,start, last, mid);             //先将n-1个盘子从start移动到中间
//    cout << start << "->" << last << endl;       //再将那个大盘子移动到最后
//    Hanoi(n - 1, mid,start ,last);             //最后将n-1个盘子又从mid移动到last
//    return;
//}
//
//int main()
//{
//    int n;
//    cout << "print some numbers" << endl;
//    cin >> n;
//    Hanoi(n, 'A', 'B', 'C');
//    return 0;
//}


/*
    003:【leetcode 51】N皇后问题
*/
//#include <iostream>
//#include <cmath>
//using namespace std;
//
//int N;                                      //输入n,为皇后的数目
//int QueenPos[100];                            //存取第i行第j列,j为数组值,i为索引值(i行皇后放在j位置)
//void NQueen(int k);
//
//void NQueen(int k)                            //这个函数目的:在0—k-1行皇后摆好的情况下,摆放k行以及其后的皇后
//{
//    int i;
//    if (k == N)                                //首先进行判断,k如果为N的话,表明摆好了,打印,并且退出函数
//    {
//        for (i = 0; i < N; i++)
//            cout << QueenPos[i] + 1 << "    ";
//        cout << "以上。" << endl;
//        return;
//    }
//    for (i = 0; i < N; i++)                    //逐个尝试第n个皇后位置
//    {
//        int j;
//        for (j = 0; j < k; j++)
//        {
//            if (QueenPos[j] == i ||abs(QueenPos[j]-i)== abs(k - j))
//            {
//                break;
//            //这里要满足两个条件:一个是行与列不能有皇后,一个是对角线不能有皇后
//            //所以这里QueenPos【j】==i表示的是,i值确定,j遍历,在矩阵(伪)中找到有i的进行排除操作
//            //第二个是实现对角线不应该相同,判断相同则为负。
//            }    
//
//        }
//        if (j == k)
//            {
//                QueenPos[k] = i;
//                NQueen(k + 1);
//            }
//    }
//}
//
//
//int main()
//{
//    cin >> N;
//    NQueen(0);
//    return 0;
//}





//#include<iostream>//个人不建议采用头文件,可能和定义的变量或名字起冲突,从而引起编译错误;
//#include<cstdlib>
//#include<cstdio>
//#include<cmath>
//using namespace std;
//int a[100], b[100], c[100], d[100];
a数组表示的是行;
b数组表示的是列;
c表示的是左下到右上的对角线;
d表示的是左上到右下的对角线;
//int total;//总数:记录解的总数
//int n;//输入的数,即N*N的格子,全局变量,搜索中要用
//int print()
//{
//    if (total <= 6)//保证只输出前三个解,如果解超出三个就不再输出,但后面的total还需要继续叠加
//    {
//        for (int k = 1; k <= n; k++)
//            cout << a[k] << " ";//for语句输出
//        cout << endl;
//    }
//    total++;//total既是总数,也是前三个排列的判断
//    return 0;
//
//}
//
//
//void queen(int i)//搜索与回溯主体
//{
//    if (i > n)
//    {
//        print();//输出函数,自己写的
//        return;
//    }
//    else
//    {
//        for (int j = 1; j <= n; j++)//尝试可能的位置
//        {
//            if ((!b[j]) && (!c[i + j]) && (!d[i - j + n]))//如果没有皇后占领,执行以下程序
//            {
//                a[i] = j;//标记i排是第j个
//                b[j] = 1;//宣布占领纵列
//                c[i + j] = 1;
//                d[i - j + n] = 1;
//                //宣布占领两条对角线
//                queen(i + 1);//进一步搜索,下一个皇后
//                b[j] = 0;
//                c[i + j] = 0;
//                d[i - j + n] = 0;
//                //(回到上一步)清除标记
//            }
//        }
//    }
//}
//int main()
//{
//    cin >> n;//输入N*N网格,n已在全局中定义
//    queen(1);//第一个皇后
//    cout <<"可能的种类数为" << total;//输出可能的总数
//    return 0;
//}

/*
    004:【leetcode 150】逆波兰表达式问题
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;

double exp()
{
    char s[20];
    cin >> 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()
    {
        printf("%1f",exp());
        return 0;
    }

原文链接:[2]递归_求阶乘_汉诺塔_N皇后_逆波兰表达式求值 - 0MrMKG - 博客园

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值