前言
本文主要介绍了VS中的调试以及函数递归。
一、VS中的调试
(1)what bug
程序没有按你预期的那样运行。
(2)what 调试(debug)
找到bug,修改bug,验证bug是否被修复。
(3)debug and release

VS中, 这两种模式有什么区别呢:
debug(调试)模式:作用于程序员。生成的exe文件不做优化,所占内存大。
release(发布)模式:作用于用户。生成的exe文件做优化,所占内存小。
(4)调试快捷键
F10:逐过程。一条语句或一个函数。
F11:逐语句。碰到自定义函数,跳到函数里逐语句。
F9:设置断点。
F5:运行到断点处。
CTRL+F5:直接运行,不管你有没有断点。
(5)监视
执行后,在调试——窗口——监视里找到,与F5,F10,F11协同作战。

二、常见的错误
(1)编译错误
编译型错误就是编译器看不懂。(语法错误和语义错误“char a = 3”——张冠李戴)
(2)链接型错误
链接型错误就是链接器无法链接。(无法识别的外部符号)
(3)运行时错误
需要借助调试分析。
三、函数的递归
(1)定义
函数的递归就是函数自己调自己,但是必须包含终止条件且调用条件必须不断靠近跳出条件。
(2)过程
递归 == 递推+回归(回溯)
递推:拆解问题,向终止条件靠近
回归(回溯):从终止条件返回,逐步解决原问题
(3)思想
大事不断化小,反哺解决问题。
(4)例子
①斐波那契数列
Ⅰ.提出问题
斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55……
求第n个斐波那契数列的值
Ⅱ.分析问题
根据观察,发先它第n项等于前两项的和。
据此,写出分段函数

Ⅲ.代码实现
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int Num(int n) {
if (n < 3) {
return 1;
}
else {
return Num(n - 1) + Num(n - 2);
}
}
int main() {
int n = 0;
scanf("%d", &n);
int ret = Num(n);
printf("%d\n", ret);
}
Ⅳ.分析代码
据此,分析递推和回溯的整个过程。(以5为例子)
递推
Num(5) → Num(4) + Num(3)
Num(4) → Num(3) + Num(2)
Num(3) → Num(2) + Num(1)
回溯
Num(2) → 返回1 Num(1) → 返回1
Num(3) ← 1 + 1 = 2(回溯计算)
Num(4) ← 2 + 1 = 3(回溯计算)
Num(5) ← 3 + 2 = 5(最终结果,回溯结束)
②青蛙跳台阶
Ⅰ.提出问题
假设有n阶台阶,青蛙每次跳一个台阶或两个台阶,总共有多少种跳法
Ⅱ.分析问题
从结果来思考,其实只有两种跳法,一种是从n-1个台阶跳到n,另一种是从n-2个台阶处跳到n。据此,表达式如下:

Ⅲ.代码实现
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int Method(int n) {
int ret = 0;
if (n < 3) {
return n;
}
else {
ret = Method(n - 1) + Method(n - 2);
return ret;
}
}
int main() {
int n = 0;
printf("请输入台阶数:");
scanf("%d", &n);
int ret = Method(n);
printf("总共有%d种跳法", ret);
}
C语言函数与调试基础
2935

被折叠的 条评论
为什么被折叠?



