1.函数递归起(复习)

2023-12-13 06:06:33

1.debug版本可以调试,realse版本不能调试

2.在realse版本中,代码已经得到了优化(编译器可能会自作主张地对代码进行优化),在大小和速度上都是最优的

3.ctrl + F5 是开始执行不调试

4.设置好断点后,用F5到达该断点,相当于是到达了该断点的那个位置程序就先停止运行了

5.设立断点条件时,条件可以是表达式,但是不能是什么函数之类的

6.好用的VS快捷键搜

7.可以这样看监视

a64a6b5700794c909a43eec9857e336f.png

8.可以用各种进制来表示内存,只是VS用16进制来展示而已

9.main函数也是函数

10.有些直接运行发现不了的程序错误在调试时能发现

11.每一次函数的运行都要在栈上开辟一块空间

12.递归的思想:把一个大型复杂问题层层转化为一个与原问题相似,但规模较小的子问题来求解;直到子问题不能再被拆分,递归就结束了.所以递归的思考方式就是把大事化小的过程

13.递归在书写的时候,有2个必要条件:
1.递归存在限制条件,当满足这个限制条件的时候,递归便不再继续
2.每次递归调用之后越来越接近这个限制条件

14.0的阶乘是1

15.上边的那个函数递归例子有一个是:

求5的阶乘

根据大事化小原则,将5!化为5*4!

再将4!化为4*3!

再将3!化为3*2!

再将2!化为2*1!

再将1!化为1*0!

那么我设立一个函数func(功能是求得某个数的阶乘)

那么我只需部分写为

return n * func(n-1);

16.再如:

输入一个数 ,打印这个数的每一位

如:1234,打印1 2 3 4?

我们将此问题化为打印1 2 3和打印4

再将打印123化为打印1 2和打印3

再将打印12化为打印1和打印2

这就是一个大事化小的过程

17.多用迭代而少用递归

18.迭代里边有一个方式就是循环

19.迭代的效率往往比递归的效率更高

20.比如求斐波那契数

183a280b37854dfeae54da4a24a96310.png

当我们输入50时,递归层次太深,运行时间太久

(输入40时,第3个斐波那系数就运行了3千九百多万次)

(栈深50层还不会溢出)

21.那么就用迭代

代码:

22.所以:

递归和循环的选择:

1.如果使用递归写代码,非常容易,写出的代码没问题,那就使用递归;

2.如果使用递归写出的问题,是存在明显的缺陷,那就不能使用递归,得用迭代的方式处理

学习数据结构的时候,会经常使用递归

23.训练:

青蛙跳台阶

青蛙跳台阶(C语言)-CSDN博客

汉诺塔问题

汉诺塔问题(C语言)-CSDN博客

24.操作符的分类更新搜

25. / 的两端有一个为小数则得到的就是小数

26.15用十六进制表示可以是F也可以是f

27.0开头的数字是八进制

例:0177是127

%o 是按照8进制的形式来打印

28.0x开头的是16进制的数字

例:0x17是23

%x 是按照16进制的形式来打印

29.2进制前边不加区分

文章来源:https://blog.csdn.net/haipengzhou/article/details/134936939
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。