day6学习笔记
- 递归
自己调用自己,或者相互调用。可以大幅度降低解决问题的难度,任何递归都可以用循环来写。
要把握两点
1、找到递归的公式(靠练,没做过的话短时间很难找到公式)
2、找到结束条件
阶乘
F(n)=n*f(n-1)
结束条件 n=1
递归中难度较大的汉诺塔问题
将a柱上的盘子放到c柱上:
1.借助c柱将n-1个盘子放在b柱上
2.将a柱剩下的一个盘子放在c柱上
3.借助a柱将n-1个盘子放在c柱上
不需要知道具体怎么做,抽象思维,交给计算机
三个盘子的算法运行轨迹(感觉极其复杂,一次性难以掌握)
- 全局变量
不能在头文件里定义,因为头文件在多个.c文件里被引用,会导致全局变量被多次初始化。
使用extern int k可以用来告知编译器变量在当前范围之外声明过了.
被extern语句描述过的变量将分派不到任何空间,因为他们在别的地方被定义过了.
3.Static关键字
用static修饰的数据,被分配在数据区,不在函数的栈(堆)空间。
修饰局部变量:变量只会初始化一次。静态局部变量和全局变量的区别是静态局部变量只在定义的大括号内有效。(静态局部变量的适用场所一般是统计函数执行次数)
修饰全局变量:让全局变量只在本文件有效。
修饰函数:函数只能在该文件内被调用