08,函数和递归


函数:一系列语句的组合,这些语句组合起来,并被指定一个名字;包含:函数名,返回值,形参,函数体

多函数执行的模式下,整个函数的执行时间被分成多个段,每段分给一个函数

任何两个时间段不能相互重叠并且所有时间段必须相连

如歌函数A把自己的时间分配给了函数B,则函数B结束之后必须把后面的时间还给函数A

如果函数A把自己的时间分配给函数B使用,则他们之间存在函数调用关系

这个关系中函数A叫做调用函数,函数B叫做被调用函数

函数不能返回数组,除此之外没有其他限制

变量不可以跨函数使用;不同的函数里可以申明重名变量

如果函数多次执行,则每次变量对应的存储区可能不同

volatile:声明的变量存储区可以在多个程序中使用

函数调用过程中通常伴随着两个函数之间哦数据传递;传递存在两个完全相反的方向,可以从调用函数传递个被调用函数,也可以从被调用函数传递给调用函数

用于实现数据传递的存储区必须有被调用函数提供(无论哪个方向)



被调用函数只能向调用函数传递一个数字;这个数字叫做被调用函数的返回值

被调用函数必须把存放返回值的存储区类型名称写在函数名称前

被调用函数里面使用return关键字指定返回值的数字

形参和实参:有参数的函数在定义时使用的参数叫形参,当调用此函数的时候,需要传入的参数叫做实参;实参传递给形参时,相当于把实参赋值给形参。从栈内存的角度看,实参属于main()函数(调用者)的栈区,形参属于自定义函数(被调用者)的栈区

当形参是数组时,不能直接传递一个参数,而是采用两个参数传递,第一个参数是不知定长度的数组,第二个参数是数组的长度

如果被调用函数的参数为空,则表示形参的个数和类型是任意的

数组形式参数里包含的存储区不是被调用函数提供的

数组形势参数可以让被调用函数使用其他函数的存储区

调用函数和被调用函数都可以使用数组形式参数中包含的存储区

利用数值形式参数可以实现双向数据传递,这种参数叫做输入输出参数

数组形式参数声明中可以省略存储区的个数  比如:int arr[5] == int arr[]

数组作为形势参数的时候需要另外提供一个整数类型形式参数,用来表示数组里包含的存储区个数

形式参数的个数可以不固定,这种参数叫做变长参数;函数中必须使用特殊方法才能得到变长参数的内容

函数大括号前面的部分叫做函数声明,可以单独作为一条语句存在;这个时候可以省略形式参数名称

把函数声明语句写在文件开头叫做函数的显式声明;显式声明可以避免隐式声明带来的问题

********************************************************

如果一个问题可以分解成几个小问题,其中至少一个小问题和原来的问题本质上一样;这种问题就可以采用递归函数解决



采用递归函数解决问题的思路叫做递归

采用循环解决同样问题的思路叫做递推


*** 什么时候会用递归函数?***

可以找到其中执行的规律,但是却无法想明白!

比如:求 1~5 的求和;即 1+2+3+4+5   
sum(5) = sum(4) + 5;
sum(4) = sum(5) + 4;
......
可以找到其中的规律:sum(a) = sum(a - 1) + a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值