4.26 函数(2)
写一个函数,使得每次调用时,num+1
法一:传地址 法二:return num+1.
函数的嵌套调用:比如 写了一个函数A,里面调用了函数B。
可以嵌套调用,不可以嵌套定义:一个函数的定义里面嵌套了另一个函数的定义。
链式访问:把一个函数的返回值变成另一个函数的参数,如把strlen的返回值作为printf的参数
Printf 打印几个字符就返回几
打印4321
函数的声明与定义
先声明后使用(可以不写形参) 定义也是一种特殊的声明
函数的声明一般放在头文件中
分模块的好处,把代码的实现和声明分离
项目名字右击-属性-常规-配置类型-静态库-生成.lib文件 .lib文件是二进制代码,配合.h食用。 保证代码隐私性。
↑导入静态库 写在调用add函数的.c文件里面
函数递归:程序调用自身-函数自己调用了自己,递推-回归
递归不能跳出会死递归,栈溢出报错。
此处n/10给跳出递归创造了条件
分开打印多位数的每一位
函数的调用堆栈-函数栈帧
关于《函数的栈帧创建和销毁》
每一次函数调用,都要在栈区上分配一块内存空间,用来保存函数在调用过程中的上下文信息。
对于上面的函数,假设输入1234,栈区是这样开辟空间的,回收是从上到下的
编写函数不允许创建临时变量,求字符串长度。利用递归实现。
递归与迭代
迭代-把一件事情反复地去做-循环就是一种迭代
求n的阶乘
求第n个斐波那契数列-前两个数的和是第三个数
递归方法: n较大时效率较低
↑效率低
用迭代(循环)效率高一些
递归遇到问题时,如何解决?
学习递归,要学会抽象
汉诺塔问题
青蛙跳台阶问题,青蛙可以一次跳一个台阶也可以一次跳两个台阶,最终是斐波那契数列。