数据-第19课-递归的应用实战一
第19课-递归的应用实战一
1. 递归的数学思想
(1) 递归是一种数学上分而自治的思想。
(2) 递归将大型复杂问题转化为与原问题相同但规模较小的问题进行处理。
(3) 递归需要有边界条件。
l 当边界条件不满足时,递归继续进行。
l 当边界条件满足时,递归停止。
2 . 递归的数学表示
n > 1
n==1
(1)斐波拉契数列递归解法
#include <stdio.h>
int fibonacci(int n)
{
if( n > 1 )
{
return fibonacci(n-1) + fibonacci(n-2);
}
else if( n == 1 )
{
return 1;
}
else if( n == 0 )
{
return 0;
}
}
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
printf("fibonacci(%d) = %d\n", i, fibonacci(i));
}
return 0;
}
(2)strlen递归解法
#include <stdio.h>
int strlen(const char* s)
{
if( s == NULL )
{
return -1;
}
else if( *s == '\0' )
{
return 0;
}
else
{
return strlen(s+1) + 1;
}
}
int main()
{
printf("strlen(\"12345\") = %d\n", strlen("12345"));
printf("strlen(NULL) = %d\n", strlen(NULL));
printf("strlen(\"\") = %d\n", strlen(""));
return 0;
}
(3)汉诺塔递归解法
为了达到这个目的,我们整理一下思路。我们举例有三个。为了将a,b,c。三个桩子上的东西,将a移动到c上(a,b,c),我们首先要做的是将其中的两个,借助c移动到b上(a,c,b)。我们再将剩下的一个直接移动到c。最后借助a将b处的盘子移动到c处(b,a,c)。
#include <stdio.h>
void hanoi(int n, char a, char b, char c)
{
if( n > 0 )
{
if( n == 1 )
{
printf("%c -> %c\n", a, c);
}
else
{
hanoi(n-1, a, c, b);
printf("%c -> %c\n", a, c);
hanoi(n-1, b, a, c);
}
}
}
int main()
{
hanoi(12, 'a', 'b', 'c');
return 0;
}
(4)全排列递归解法
#include <stdio.h>
void permutation(char s[], int b, int e)
{
if( (0 <= b) && (b <= e) )
{
if( b == e )
{
printf("%s\n", s);
}
else
{
int i = 0;
for(i=b; i<=e; i++)
{
char c = s[b];
s[b] = s[i];
s[i] = c;
permutation(s, b+1, e);
c = s[b];
s[b] = s[i];
s[i] = c;
}
}
}
}
int main()
{
char s[] = "abcd";
permutation(s, 0, 3);
return 0;
}
小结
(1) 递归是一种将问题分而自治的思想。
(2) 用递归解决问题首先要建立递归的模型。
(3) 递归解法必须要有边界条件,否则将死循环。
转载于:https://www.cnblogs.com/free-1122/p/11322807.html
数据-第19课-递归的应用实战一相关推荐
- Nehe第19课 粒子系统
源代码链接 #include<windows.h> // Windows的头文件 #include <gl/glew.h> // 包含最新的gl.h,glu.h库 #inclu ...
- 大数据入门第一课 Hadoop基础知识与电商网站日志数据分析
大数据入门第一课 Hadoop基础知识与电商网站日志数据分析 本课程从Hadoop核心技术入手,以电商项目为依托,带领你从0基础开始上手,逐步掌握大数据核心技术(如:HDFS.YARN.MapRedu ...
- Spark IMF传奇行动第19课:spark排序总结
今晚听了王家林老师的Spark IMF传奇行动第19课:spark排序,作业是:1.scala 实现二次排序,使用object apply 2:自己阅读RangePartitioner 代码如下: / ...
- c语言折半查找递归程序,C语言数据结构中二分查找递归非递归实现并分析
C语言数据结构中二分查找递归非递归实现并分析 前言: 二分查找在有序数列的查找过程中算法复杂度低,并且效率很高.因此较为受我们追捧.其实二分查找算法,是一个很经典的算法.但是呢,又容易写错.因为总是考 ...
- 3w最简单led灯电路图_Mixly 第19课 光感应灯——光敏电阻使用
第19课 光感应灯--光敏电阻使用 光敏电阻器又叫光感电阻,是利用半导体的光电效应制成的一种电阻值随入射光的强弱而改变的电阻器:入射光强,电阻减小,入射光弱,电阻增大.光敏电阻器一般用于光的测量.光 ...
- 人教版三年级下册计算机课教案,人教版三年级下册19课教案
人教版三年级下册19课教案 (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 15.9 积分 课题: Unit 4 Do you like candy? ...
- 制造业案例|数据效率提升近90%,敏实借助瓴羊DAAS体系结构加速数字化转型
数据智能产业创新服务媒体 --聚焦数智 · 改变商业 你不一定听过敏实,但你一定知道宝马.奔驰.奥迪.英菲尼迪克等知名车企,而这些知名车企产车背后所需的零部件,许多都来自于敏实. 作为一家跨国汽车零 ...
- 当且仅当函数依赖a→b在r上成立_数据库第06章关系数据理习题课.ppt
您所在位置:网站首页 > 海量文档  > 计算机 > 数据结构与算法 数据库第06章关系数据理习题课.ppt36页 本 ...
- 珍大户《认知世界的经济学》学习笔记 --第19课 时间补偿 第20课 利率 国债 MLF SLF OMO 利率
珍大户<认知世界的经济学>学习笔记 – 第五章 第19课 时间补偿 文章目录 珍大户<认知世界的经济学>学习笔记 -- 第五章 第19课 时间补偿 把钱借给国家 通货膨胀程度 ...
- python逐笔输入数据_知到智慧树Python数据分析与数据可视化结课测验
知到智慧树Python数据分析与数据可视化结课测验答案 更多相关问题 已知三角形三个顶点的坐标是A(-1,2,3),B(1,1,1),C(0,0,5),试证三角形ABC是直角三角形,并求角B-- Wh ...
最新文章
- 爆肝,52条SQL语句,性能优化,干货必收藏 !
- SpringBoot v2.2.6版本遇到的坑 --- HiddenHttpMethodFilter组件的锅
- Problem01 不死神兔
- 【Construct Binary Tree from Inorder and Postorder Traversal】cpp
- java http请求_如何设置Fiddler来拦截Java代码发送HTTP请求,进行各种问题排查
- Intel Core Enhanced Core架构/微架构/流水线 (9) - 执行单元发射口旁路时延
- oppo手机维语字体_老年人上网困难重重?学会OPPO这几个功能无后顾之忧
- 玩转SpringBoot 2 快速搭建 | Spring Initializr 篇
- canvas 绘制直线 并选中_javascript自学记录:canvas绘图
- [论文阅读] TransUNet: Transformers Make Strong Encoders for Medical Image Segmentation
- PAT 1081. 检查密码 (15) - 乙级
- Win2008使用WEB方式更改工作组计算机用户帐户密码
- 《白帽子讲web安全》学习笔记 (4)
- Linux 中断学习之小试牛刀篇---Linux中断内核编程
- @using (Html.BeginForm())参数示例
- C. Memory and De-Evolution 逆向思维
- php公众号模板推送开发教程,微信公众号之模板推送
- python之函数深析
- 【华为机试真题详解】高矮个子排队
- WPF实现简单的颜色调色板功能
热门文章
- 运输层(UDP)详解(一)
- 谁说漂亮女程序猿就不能拿大厂Offer了?
- 从面试题中看Java的Reference(引用)
- Android Multimedia框架总结(一)MediaPlayer介绍之状态图及生命周期
- Android View框架总结(七)View事件分发机制
- 用mysql计算年龄lt;gt;,什么是运算符lt; =gt;在MySQL中?
- 三菱plc分拣程序_三菱PLC实现电梯控制方案,含全套程序设计
- linux vsftp 无法上传文件,解决vsftp 不能匿名上传文件的问题
- listview mysql源码_用ListView实现对数据库的内容显示
- python脚本实现ipv6的ddns功能