- 5. 函数的嵌套调用和链式访问
- 5.1 嵌套调用
- 5.2 链式访问
- 6. 函数的声明和定义
- 6.1 函数声明
- 6.2 函数定义
- 7.递归
- 7.1 什么是递归?什么是迭代?
- 7.2 递归的两个必要条件
- 7.3 递归与迭代
函数和函数之间可以根据实际的需求进行组合的,也就是互相调用的。
5.1 嵌套调用***#includevoid new_line() { printf("hehen"); } void three_line() { int i = 0; for(i=0; i<3; i++) { new_line(); } } int main() { three_line(); return 0; }***
这里的new_line three_line进行了嵌套
函数可以嵌套调用,但是不能嵌套定义。
5.2 链式访问把一个函数的返回值作为另外一个函数的参数。
- 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数
声明决定不了。 - 函数的声明一般出现在函数的使用之前。要满足先声明后使用。
- 函数的声明一般要放在头文件中的。
函数的定义是指函数的具体实现,交待函数的功能实现。
7.递归 7.1 什么是递归?什么是迭代?程序调用自身的编程技巧称为递归( recursion)。
递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接
调用自身的
一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,
递归策略
只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
递归的主要思考方式在于:把大事化小
迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。
1.存在限制条件,当满足这个限制条件的时候,递归便不再继续。
2.每次递归调用之后越来越接近这个限制条件。
例题1.用递归求N的阶乘
例题2.使用递归的方法求第n个斐波那契数
但是在这里我们发现一个问题
在使用 Fac这个函数的时候如果我们要计算第50个斐波那契数字的时候特别耗费时间。
并且N的值输入的很大的话,程序会崩溃。
所以我们应该使用非递归的方法
注意:
- 许多问题是以递归的形式进行解释的,这只是因为它比非递归的形式更为清晰。
- 但是这些问题的迭代实现往往比递归实现效率更高,虽然代码的可读性稍微差些。
- 当一个问题相当复杂,难以用迭代实现时,此时递归实现的简洁性便可以补偿它所带来的运行时开
销。



