第一次学c语言系列之——函数补充知识!!!

C语言函数与调试基础

前言

本文主要介绍了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);
    }

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值