标准C学习day08 函数 递归和递推

数组也可以作为形式参数使用
数组形式参数不在被调用函数里
真正的形式参数不是数组,而是一个可以
作为数组使用的变量
数组形式参数里的存储区在函数调用开始
之前就已经存在了,函数调用结束后
也依然存在
声明数组形式参数的时候可以省略数组里
的存储区个数
使用数组形式参数的时候需要另外提供一个
整数类型的形式参数表示数组里的
存储区个数
使用数组形式参数可以实现双向数据传递,
这种参数叫做输入输出参数

如果被调用函数写在下面编译器会猜测它的
格式
编译器认为函数有一个整数类型的返回值
并且有任意多个不确定类型的形式参数
参数只能是整数类型或双精度浮点类型
这个猜测结果叫做函数的隐式声明
如果隐式声明和函数的真实格式不一致编译
就会出错

函数大括号前面的部分可以单独写成一条
语句,这种语句叫做函数声明语句
函数声明语句里可以省略形式参数名称
把函数声明语句写在文件开头叫函数的显式
声明,这可以避免隐式声明
除了主函数以外的所有函数都应该进行
显式声明

exit标准函数可以立刻结束程序的执行
为了使用这个标准函数需要包含stdlib.h
头文件
这个函数需要一个整数类型的参数,这个
参数的作用和主函数返回值的作用类似

c语言里函数可以调用自己
这种函数叫递归函数

                 ...
              1    print()
             *** ************
          1      print()
         *** ****************
      1        print()
     *** ********************
             print()
     *************************

如果一个问题可以采用一种方法不停的分解
并且分解后的问题一定比原来的问题
简单就可以采用递归函数解决

递归函数编写步骤
1.编写语句解决分解后的每个小问题
(假设递归函数已经可以使用)
2.在递归调用语句之前编写分支解决
不可分解的情况(分支必须保证
函数可以结束)

用循环解决问题的方法叫递推
用递归函数解决问题的方法递归

首先用最简单的参数测试递归函数的结果,
然后把参数逐渐变得复杂继续测试.
用这种方法可以搞清楚递归函数的实际执行
效果

变量分为局部变量和全局变量
局部变量都声明在函数里面
全局变量声明在所有函数外边
不论局部变量还是全局变量都分为静态和
非静态两种
声明静态变量的时候需要使用static关键字

             变量
 局部变量             全局变量

静态 非静态 静态 非静态

不同种类变量的使用范围不同
作用域是一种使用范围,它表示可以使用
某个变量的所有语句
生命周期也是一种使用范围,它表示可以使用
某个存储区的所有时间

非静态局部变量的作用域是函数内部的
所有语句
非静态局部变量的生命周期是函数某一次
执行的时间范围
在函数开始执行的时候计算机会为非静态
局部变量分配存储区,在函数结束的
时候计算机会把非静态局部变量的
存储区收走
每当函数重新执行时非静态局部变量对应
的存储区都会发生变化
只要函数结束后记录在非静态局部变量里
的数字就找不到了

静态局部变量的作用域也是函数里面的
所有语句
静态局部变量的生命周期是整个程序的
执行时间
记录在静态局部变量里的数字只要程序
没结束就一定可以找到

非静态全局变量的作用域包含程序里
的所有语句
非静态全局变量的生命周期是整个程序
的执行时间

静态全局变量的作用域只包含声明它的
那个文件里的所有语句
静态全局变量的生命周期也是整个程序
的执行时间

非静态局部变量类似于别墅里的家具
静态局部变量类似于别墅下面的土地
静态全局变量类似于小区里的道路
非静态全局变量类似于小区外的道路

静态变量和全局变量的初始化都是在程序
开始的时候进行并且只做一次
如果静态变量或全局变量没有初始化就会
自动被初始化成0
全局变量和局部变量可以重名,这个变量
名称优先代表局部变量
如果局部变量和全局变量都能满足要求
应该优先选择局部变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值