基础算法 —— 递归算法
【概述】
- 递归算法:一种通过重复将问题分解为同类的子问题而解决问题的方法。
- 适用问题:解决结构自相似的问题。即:构成原问题的子问题与原问题在结构上相似,可以用类似的方法解决。
- 特点:反复执行、结束反复执行的条件
- 缺点:占用大量内存且不易阅读
【两个问题】
- 递归边界条件(递归终止条件):确定递归到何时终止,或者说,直接有解的情况。
- 递归模式(递归体):大问题是如何分解为小问题的。
注:递归终止条件通常就是得出最小问题的解,并返回给他的调用者。
【间接递归与直接递归】
1.直接递归调用:就是在函数f中直接调用函数f本身
2.间接递归调用:就是在函数f1中调用另外一个函数f2,而该函数f2又调用了函数f1
【经典应用】
1.递归求和
void Sum(int n)
{if(n>1)return n+Sum(n-1);elsereturn 1;
}
2.递归求阶乘
阶乘的递归公式:
int F(int n)
{ if(n==0)return 1; return n*F(n-1);
}
3.斐波那契数列递归实现
int Fibonacci(int n)
{if(n==1)return 1;if(n==2)return 1;return Fibonacci(n-1)+Fibonacci(n-2);
}
关于斐波那契数列:点击这里
4.汉诺塔问题的递归实现
#include<stdio.h>
void move(int n, char x, char y, char z)//将n个圆盘从x柱子上借助y柱子移动到z柱子上
{if(n == 1)printf("圆盘编号 %d :从 %c 移动到 %c\n",n,x,z);else{move(n-1,x,y,z);printf("圆盘编号 %d:从 %c 移动到 %c\n",n,x,z);move(n-1,y,x,z);}}
int main()
{int n;//n代表圆盘的个数/*A,B,C分别代表三个柱子*/char ch1 = 'A';char ch2 = 'B';char ch3 = 'C';printf("请输入圆盘的个数:");scanf("%d",&n);move(n,ch1,ch2,ch3);return 0;
}
关于汉诺塔问题:点击这里
【例题】
1.普通
- 数的计算(洛谷-P1028):点击这里
同题:数的计数(信息学奥赛一本通-T1316):点击这里 - 放苹果(信息学奥赛一本通-T1206):点击这里
- 鸣人的影分身(信息学奥赛一本通-T1303):点击这里
- 进制转换(洛谷-P1017):点击这里
- Pell数列(信息学奥赛一本通-T1202):点击这里
- 黑白棋子的移动(信息学奥赛一本通-T1327):点击这里
- 判断元素是否存在(信息学奥赛一本通-T1211):点击这里
- 汉诺塔问题(信息学奥赛一本通-T1205):点击这里
- 分解因数(信息学奥赛一本通-T1200):点击这里
- 因子分解(信息学奥赛一本通-T1210):点击这里
- 分数求和(信息学奥赛一本通-T1209):点击这里
- 求最大公约数问题(信息学奥赛一本通-T1207):点击这里
2.其他
- 火柴棒等式(洛谷-P1149)(打表递归):点击这里
- 逆波兰表达式(信息学奥赛一本通-T1198)(atof()函数的使用):点击这里
- 选数(洛谷-P1036)(递归+素数判断):点击这里
- 幂次方(洛谷-P1010)(递归+整数分解):点击这里
同题:2的幂次方表示(信息学奥赛一本通-T1208):点击这里 - Xor Sum(AtCoder-2272)(map+打表):点击这里
- 石头剪刀布(2019牛客寒假算法基础集训营 Day6-F)(字典序):点击这里
- Formurosa(CF-217C)(位运算):点击这里
- fraction(HDU-6624)(数学推导+递归):点击这里
基础算法 —— 递归算法相关推荐
- AcWing基础算法课Level-2 第四讲 数学知识
AcWing基础算法课Level-2 第四讲 数学知识 您将学会以下数学名词 质数,试除法,埃式筛法,线性筛,辗转相除,算术基本定理,质因数分解,欧拉函数,快速幂,费马小定理,逆元,拓展欧几里得,一次 ...
- 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)
信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法 更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...
- 1. 通用基础算法(1.7动态规划算法/1.8模拟算法/1.9其他算法)
7 动态规划算法 动态规划(Dynamic Programming)是求多阶段决策过程(Multistep Decision Process)最优化的一种数学方法,它将问题的整体按时间或空间的特征分 ...
- Pascal 基础算法教案
基础算法教案 目录 第一课 算法简介... 1 第二课 多精度数值处理... 1 第三课 排列与组合... 6 第四课 枚举法... 9 第五课 递归与回溯法... 25 第六课 递推法 ...
- 二叉树的基础算法综述
二叉树是一种递归定义的数据结构,自然而然地其算法大多也都采用递归的形式.二叉树的基础算法包括且不限于: (1)二叉树的建立 (2)二叉树的三种遍历 (3)二叉树各类结点数计算(度为2,1,0的个数) ...
- python:算法——递归算法
python:算法--递归算法 1.什么是递归算法 在计算机中,程序调用自身的编程技巧我们称之为递归算法.那么再通俗一点来讲就是:在某个python文件中,有一个函数,这个函数可以在自己的函数体内 ...
- 基础,算法,编程的1000+篇文章总结
基础,算法,编程的1000+篇文章总结 本文收集和总结了有关基础,算法,编程的1000+篇文章,由于篇幅有限只能总结近期的内容,想了解更多内容可以访问:http://www.ai2news.com/, ...
- 基础算法整理(1)——递归与递推
程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一 ...
- 暑期集训2:ACM基础算法 练习题G:POJ - 1298
2018学校暑期集训第二天--ACM基础算法 练习题G -- POJ - 1298 The Hardest Problem Ever Julius Caesar lived in a time o ...
最新文章
- MySQL数据库-错误1166 - Incorrect column name 'xxx' 的解决方法
- tf.keras.layers.Resizing 示例 改变维度的层
- Ubuntu图形界面配置开机自启动
- php 分布式环境 启动,极简.高性能.分布式框架,可运行于多种环境(apache/php-fpm,swoole)...
- Java集合篇:ArrayList详解
- Sublime Text 3 代码格式化插件推荐 CodeFormatter
- 大话存储学习笔记(4)
- 算法笔记_面试题_18.动态规划_模板及示例十几道(上)
- 联想G480 i3 2348M扩展内存
- RFM模型实现用户分层
- 优秀IT顾问的七大能力之一--专业技术能力
- NDK 入门与进阶—第一个NDK程序(一)
- 深度学习-自然语言模型
- 妙用分部积分处理双重积分
- 笛卡尔坐标变换: UVA1602
- python使用tkinter万年历
- 会员制实现C2B定制有机农产品,被中粮我买投资的良食网这样卖有机生鲜
- 模拟ic流片经验分享
- 设计模式案例分析与实现
- MYSQL学习笔记-(白夜黑羽)
热门文章
- Python传奇:30年崛起之路
- 压力、焦虑远远超出全国平均值,近4成程序员心理不健康?
- Simulink之三相桥式全控整流电路
- w8服务器dns修改,Win8.1系统的DNS地址如何修改?修改win8.1系统DNS地址图文教程
- Spring Boot 属性配置你所不知道的细节
- 深入浅出 MySQL 优先队列
- 漫话:如何给女朋友解释华为鸿蒙OS是怎样实现跨平台的?
- 律师坚称技术无罪:“钉钉打卡神器”开发者二审被改判四年
- JimuReport积木报表——如何设计一张带二维码的打印报表?
- 查询SQLSERVER执行过的SQL记录