标签:顺序 表示 out c语言 rgba 调用顺序 blank auth 递归
一、递归程序的定义
程序调用自身的编程技巧叫做递归
递归程序的组成部分
1.语义信息
2.边界条件
3.针对于问题的处理过程和递归过程 (推导出一个递推式子)
4.结果返回
注意:函数的结果返回有两种方式,分别为1.return返回;2.传出参数返回(通过指针变量去实现)
例子:编写一个n的阶乘的程序。
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 <stdio.h>
8
9 int factor(int n) {//语义信息
10 if (!n || n == 1) {
11 return 1;//边界条件
12 }
13 return n * factor(n - 1);//推导出一个递推式子,并结果返回
14 }
15
16 int main(void) {
17 int n;
18 while (scanf("%d", &n)) {
19 printf("%d! = %d\n", n, factor(n));
20 }
21 return 0;
22 }
编译并运行。
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
二、怎么去证明递归程序结果是否正确
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)后,就开始返回返回值,即向上回溯,如下图。
这就是大致的验证递归程序设计是否正确的方法。
标签:顺序 表示 out c语言 rgba 调用顺序 blank auth 递归
原文地址:https://www.cnblogs.com/ydqblogs/p/13942652.html