博客
关于我
递推算法——例题详解
阅读量:788 次
发布时间:2019-03-24

本文共 1445 字,大约阅读时间需要 4 分钟。

递推算法的本质

递推算法的本质是通过将复杂问题分解为多个较小的问题并建立彼此之间的数字关系,将问题一步步简化求解。在递推过程中,我们通过已知部分问题的结果,逐步推导出未知部分的问题解,类似于从下而上解决问题的方式,使得问题变得更加清晰和可控。

例一:数塔问题(倒推法)

数塔问题是递推算法的经典例子。问题描述为:在一个由数字构成的数塔中,从顶部到底部找出一条路径,使得路径上的数字之和最大。解决这个问题的常用方法是倒推法,即从上层向下层推导。

分析:将问题从上而下分解显然并不直观,因此我们选择从下而上进行分析。通过观察我们可以发现,每一层的数字之和等于下一层中与其相邻的两个数字中较大的那个加上当前层的数字。

最终,从最底层到最顶层,我们逐步计算每层的值,从而得到最大和路径。

代码实现:

#include 
#include
#include
#include
using namespace std;int main() { int n, i, j; char a[101][101]; cin >> n; for (i = 1; i <= n; ++i) { for (j = 1; j <= i; ++j) { cin >> a[i][j]; } } for (i = n - 1; i >= 1; --i) { for (j = 1; j <= i; ++j) { if (a[i + 1][j] >= a[i + 1][j + 1]) { a[i][j] += a[i + 1][j]; } else { a[i][j] += a[i + 1][j + 1]; } } } cout << a[1][1] << endl; return 0;}

例二:斐波那契数列的非递归实现

斐波那契数列是一个经典的递推序列,其定义为:f(0)=1,f(1)=1,f(n)=f(n-1)+f(n-2)。通过递推式,我们可以逐步计算出后续的数列项。

分析:观察数列的结构,我们可以发现每一项都等于前两项之和。通过非递归的方式,我们可以通过循环实现,将前一项和前前一项的值相加,逐步生成数列。

代码实现:

#include 
#include
#include
#include
using namespace std;int main() { int f0 = 1, f1 = 1, f2 = 2; int n; cin >> n; for (int i = 3; i <= n; ++i) { f2 = f0 + f1; f0 = f1; f1 = f2; } cout << f2; return 0;}

其他相关类型的问题

类似的递推类型问题还包括经典的蓝桥杯题目“奶牛问题”等,其中涉及递归和非递归的不同实现方法。

转载地址:http://phrkk.baihongyu.com/

你可能感兴趣的文章
Postgresql 外部表插件postgres_fdw的安装和使用
查看>>
PostgreSQL 如何从崩溃状态恢复(上)
查看>>
PostgreSQL 存储过程基本语法
查看>>
PostgreSQL 实现批量更新、删除、插入
查看>>
PostgreSQL 导入 .gz 备份文件
查看>>
PostgreSQL 批量插入&更新数据时报错(ERROR: ON CONFLICT DO UPDATE command cannot affect row a second time)
查看>>
PostgreSQL 新增数据返回自增ID
查看>>
postgresql 更新多列数据
查看>>
PostgreSQL 服务启动后停止
查看>>
PostgreSQL 辟谣存在任意代码执行漏洞:消息不实
查看>>
PostgreSQL+PostGIS实现两坐标点之间最短路径查询算法函数(地图工具篇.12)
查看>>
Qt开发——简易调色板QPalette
查看>>
PostgreSQL-解决连接时遇到的乱码问题
查看>>
PostgreSQL15.2最新版本安装_远程连接_Navicat操作_pgAdmin操作_Windows10上安装---PostgreSQL工作笔记001
查看>>
PostgreSQL9.1 双机部署配置(主备数据同步)
查看>>
Qt开发——简易网络浏览器(一)
查看>>
Qt开发——简易成绩登记系统
查看>>
Postgresql中PL/pgSQL代码块的语法与使用-声明与赋值、IF语句、CASE语句、循环语句
查看>>
Postgresql中PL/pgSQL的游标、自定义函数、存储过程的使用
查看>>
SpringBoot中集成XXL-JOB分布式任务调度平台,轻量级、低侵入实现定时任务
查看>>