C语言学习笔记--递归函数
1. 递归函数的思想
(1)递归是一种数学上分而自治的思想,是将大型复杂问题转化为与原问题相同但规模较小的问题进行处理的一种方法
(2)递归需要有边界条件
①当边界条件不满足时,递归继续进行
②当边界条件满足时,递归停止
2. 递归函数
(1)递归函数的函数体内部存在自我调用
(3)递归函数是递归的数学思想在程序设计中的应用。必须有递归出口,无限递归将导致程序栈溢出而崩溃。
3. 递归函数设计技巧
(1)递归模型的一般表示法

4. 递归函数设计实例
(1)用递归的方法编写函数求字符串长度
#include <stdio.h> int my_strlen(const char* s)
{
if(*s)
{
return + my_strlen(s + );
}
else
return ;
} int main()
{
printf("%d\n", my_strlen("abc"));
return ;
}
(2)斐波那契数列递归解法

#include <stdio.h> int fac(int n)
{
if (n == )
{
return ;
}
else if (n == )
{
return ;
}
else
{
return fac(n - ) + fac(n - );
}
} int main()
{
printf("%d\n",fac());
printf("%d\n",fac());
printf("%d\n",fac()); return ;
}
(3)汉诺塔问题
①需求描述

I、将木块借助 B 柱由 A 柱移动到 C 柱
II、每次只能移动一个木块
III、只能出现小木块在大木块之上
②问题分解

I、将 n-1 个木块借助 C 柱由 A 柱移动到 B 柱
II、将最底层的唯一木块直接移动到 C 柱
III、将 n-1 个木块借助 A 柱由 B 柱移动到 C 柱
#include <stdio.h> void han_move(int n, char a, char b, char c)
{
if (n == )
{
printf("%c --> %c\n", a, c);
}
else
{
han_move(n -,a, c, b);
han_move(, a, b, c);
han_move(n -, b, a, c);
}
} int main()
{ han_move(, 'a', 'b', 'c'); return ;
}
递归是一种将问题分而自治的思想,用递归解决问题首先要建立递归的模型。
参考资料:
www.dt4sw.com
http://www.cnblogs.com/5iedu/category/804081.html
C语言学习笔记--递归函数的更多相关文章
- HTML语言学习笔记(会更新)
# HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...
- 2017-04-21周C语言学习笔记
C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...
- 2017-05-4-C语言学习笔记
C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...
- GO语言学习笔记(一)
GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...
- Haskell语言学习笔记(88)语言扩展(1)
ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...
- Go语言学习笔记十三: Map集合
Go语言学习笔记十三: Map集合 Map在每种语言中基本都有,Java中是属于集合类Map,其包括HashMap, TreeMap等.而Python语言直接就属于一种类型,写法上比Java还简单. ...
- Go语言学习笔记十二: 范围(Range)
Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...
- Go语言学习笔记十一: 切片(slice)
Go语言学习笔记十一: 切片(slice) 切片这个概念我是从python语言中学到的,当时感觉这个东西真的比较好用.不像java语言写起来就比较繁琐.不过我觉得未来java语法也会支持的. 定义切片 ...
- Go语言学习笔记十: 结构体
Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...
随机推荐
- RPM和yum相关
写在前面: 在这里可以知道rpm和yum的基本用法,找到更新本地yum源.搭建yum源的方法以及yum很琐碎的东西,包括yum源的优先级.用yum来安装或卸载CentOS图形界面包以及保存yum下载的 ...
- Bellman-Ford算法 O(NE)
Bellman-Ford算法 O(NE) 思路:枚举n-1次所有边,通过枚举所有边,将所有和已知点相连的点都设为已知,初始时起点为已知点. ;i<=n-;i++){ //n-1是次数,枚举n-1 ...
- phalcon: 开启模板缓存和缓存路径
/** * 设置view */ $di->set('view', function () use ($config) { $view = new \Phalcon\Mvc\View(); $vi ...
- webservice中将dataset 压缩
http://blog.csdn.net/bodaowang/article/details/6889446 在webservice中将dataset序列化是我们经常遇到的问题,但是遇到很大的data ...
- OUTlook无法预览xls文件
outlook可以正常预览doc,pdf,jpg格式的附件,但是xls和xlsx格式就是不能预览.找了好多网络上的办法,都是不行,最终还是找一个靠谱的办法,记录一下 这个方法非常有用:如题, 本人安装 ...
- BW ON HANA 业务模型关系与数据取数
在接到业务需求之后,我认为重要的是理清楚自己该做什么.来实现业务.由于不了解业务,还是走了很多弯路.本可以不用这么做,还是这么做了.自然你最傻瓜的按照用户的方式去实现是没有问题的. 会使后面的人难以维 ...
- websphere6.1升级
1.到IBM websphere官方网站下载相应版本的更新包,如6.1.0-WS-WASSDK-WinX32-FP0000021.pak和6.1.0-WS-WAS-WinX32-FP0000021.p ...
- hdu4451 Dressing(容斥原理)
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #inc ...
- vue切换样式
在vue中使用事件来切换绑定的class样式,在vue-cli脚手架中的Home.vue中 <template> <div id="main"> <l ...
- jsp中引入JavaScript的方法
1:在页面中直接嵌入JavaScript <script language="javascript">..........</script> 2:链接外部J ...