C语言--递归程序的设计
2021-03-19 15:27
标签:顺序 表示 out c语言 rgba 调用顺序 blank auth 递归 一、递归程序的定义 程序调用自身的编程技巧叫做递归 递归程序的组成部分 1.语义信息 2.边界条件 3.针对于问题的处理过程和递归过程 (推导出一个递推式子) 4.结果返回 注意:函数的结果返回有两种方式,分别为1.return返回;2.传出参数返回(通过指针变量去实现) 例子:编写一个n的阶乘的程序。 编译并运行。 二、怎么去证明递归程序结果是否正确 1.我们可以试着把每一次函数调用展开去分析。 例如 6!在我们上述的代码中展开去分析如下:factor(6) = 6 * factor(5) = 6 * 5 * factor(4) = 6 * 5 * 4 * factor(3) = 6 * 5 * 4 * 3 * factor(2) = 6 * 5 * 4 * 3 * 2 * factor(1) = 6 * 5 * 4 * 3 * 2 * 1 = 720。 但是你发现,这样去展开似乎有点“傻X”,我们应该有更好的证明方法。 2.数学归纳法 定义: 数学归纳法(Mathematical Induction, MI)是一种数学证明方法,通常被用于证明某个给定命题在整个(或者局部)自然数范围内成立。 以我们上述的阶乘求法为例子。 第一步:首先n = 1时,factor(1) = 1,结果时正确的,所以n=1时,代码逻辑正确。 第二步:假设n = k时,factor(n) = m,由于(k + 1)!等于(k + 1)* k!,所以我们得出我们的程序递归程序设计正确。 总结表述: 有了上面的两步分析,我们就可以从factor(6)向下递推下去表示函数调用顺序,到了factor(1)后,就开始返回返回值,即向上回溯,如下图。 这就是大致的验证递归程序设计是否正确的方法。 C语言--递归程序的设计 标签:顺序 表示 out c语言 rgba 调用顺序 blank auth 递归 原文地址:https://www.cnblogs.com/ydqblogs/p/13942652.html 1 /*************************************************************************
2 > File Name: 4.c
3 > Author: yudongqun
4 > Mail: qq2841015@163.com
5 > Created Time: Sat 07 Nov 2020 08:27:04 PM CST
6 ************************************************************************/
7 #include
ydqun@VM-0-9-ubuntu chapter4 % gcc 4.c [130]
ydqun@VM-0-9-ubuntu chapter4 % ./a.out [0]
0
0! = 1
1
1! = 1
6
6! = 720
9
9! = 362880
^C
原理
解题要点
上一篇:C++在C的基础上改进了哪些细节