1.debug版本可以调试,realse版本不能调试
2.在realse版本中,代码已经得到了优化(编译器可能会自作主张地对代码进行优化),在大小和速度上都是最优的
3.ctrl + F5 是开始执行不调试
4.设置好断点后,用F5到达该断点,相当于是到达了该断点的那个位置程序就先停止运行了
5.设立断点条件时,条件可以是表达式,但是不能是什么函数之类的
6.好用的VS快捷键搜
7.可以这样看监视
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.比如求斐波那契数
当我们输入50时,递归层次太深,运行时间太久
(输入40时,第3个斐波那系数就运行了3千九百多万次)
(栈深50层还不会溢出)
21.那么就用迭代
代码:
22.所以:
递归和循环的选择:
1.如果使用递归写代码,非常容易,写出的代码没问题,那就使用递归;
2.如果使用递归写出的问题,是存在明显的缺陷,那就不能使用递归,得用迭代的方式处理
学习数据结构的时候,会经常使用递归
23.训练:
青蛙跳台阶
青蛙跳台阶(C语言)-CSDN博客
汉诺塔问题
24.操作符的分类更新搜
25. / 的两端有一个为小数则得到的就是小数
26.15用十六进制表示可以是F也可以是f
27.0开头的数字是八进制
例:0177是127
%o 是按照8进制的形式来打印
28.0x开头的是16进制的数字
例:0x17是23
%x 是按照16进制的形式来打印
29.2进制前边不加区分