算法作业-第二章递归算法设计

目录

1 利用栈和递归算法两种方式实现逆波兰表达式

代码:

运行截图:

​​​​​​​2 介绍递归算法思路,并以 8 9 2 + - 7 *为例说明算法的执行过程。

递归算法思路:

算法的执行过程:

递归算法的执行过程:

 利用栈非递归算法的执行过程:


​​​​​​​1 利用栈和递归算法两种方式实现逆波兰表达式

代码:

#include <iostream>

#include <stack>

using namespace std;



/*逆波兰的递归函数*/

int DBolan(char arr[], int& i) {

    if (arr[i] >= '0' && arr[i] <= '9') {

        return arr[i] - '0';

    }

    else {

        if (arr[i] == '+') {

            int x = DBolan(arr, --i);

            int y = DBolan(arr, --i);

            return y + x;

        }

        else if (arr[i] == '-') {

            int x = DBolan(arr, --i);

            int y = DBolan(arr, --i);

            return y - x;

        }

        else if (arr[i] == '*') {

            int x = DBolan(arr, --i);

            int y = DBolan(arr, --i);

            return y * x;

        }

        else if (arr[i] == '/') {

            int x = DBolan(arr, --i);

            int y = DBolan(arr, --i);

            return y / x;

        }

    }

}



/*利用栈来解决逆波兰*/

int Bolan(char arr[], int n) {

    stack<int>my;

    for (int i = 0; i < n; ++i) {

        int tmp;

        if (arr[i] >= '0' && arr[i] <= '9') {

            my.push(arr[i] - '0');

        }

        else {

            if (arr[i] == '+') {

                int x = my.top();

                my.pop();

                int y = my.top();

                my.pop();

                tmp = y + x;

                my.push(tmp);

            }

            else if (arr[i] == '-') {

                int x = my.top();

                my.pop();

                int y = my.top();

                my.pop();

                tmp = y - x;

                my.push(tmp);

            }

            else if (arr[i] == '*') {

                int x = my.top();

                my.pop();

                int y = my.top();

                my.pop();

                tmp = y * x;

                my.push(tmp);

            }

            else {

                int x = my.top();

                my.pop();

                int y = my.top();

                my.pop();

                tmp = y / x;

                my.push(tmp);

            }

        }

    }

    return my.top();

}



int main() {

    char arr[] = { '8', '9', '2', '+', '-', '7', '*' };

    int num = 7;

    cout << "逆波兰非递归的结果:" << Bolan(arr, num) << endl;

    --num;

    cout << "逆波兰递归的结果:" << DBolan(arr, num) << endl;

    return 0;

}

运行截图:

​​​​​​​2 介绍递归算法思路,并以 8 9 2 + - 7 *为例说明算法的执行过程。

递归算法思路:

逆波兰表达式就是将A op B变为A B op的形式,比如A+B变为A B +。所有的逆波兰表达式都是利用此方法不断嵌套。

算法的执行过程:

递归算法的执行过程:

 利用栈非递归算法的执行过程:

相关推荐

  1. [数据结构]C++算法作业

    2024-02-23 08:38:01       35 阅读
  2. ---算法

    2024-02-23 08:38:01       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-23 08:38:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-23 08:38:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-23 08:38:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-23 08:38:01       18 阅读

热门阅读

  1. haproxy集成国密ssl功能

    2024-02-23 08:38:01       33 阅读
  2. vivado RAM Inference

    2024-02-23 08:38:01       26 阅读
  3. nifi连接Sql server数据库报错TLS问题

    2024-02-23 08:38:01       34 阅读
  4. C++程序设计学习笔记(二)

    2024-02-23 08:38:01       27 阅读
  5. Go 语言一些常用语法编写和优化指南

    2024-02-23 08:38:01       27 阅读
  6. 力扣(leetcode)第455题分发饼干(Python)

    2024-02-23 08:38:01       30 阅读
  7. 嵌入式系统发展前景?

    2024-02-23 08:38:01       25 阅读
  8. mxonline安装总结

    2024-02-23 08:38:01       29 阅读