函数的嵌套调用和链式访问
函数和函数之间可以根据实际的需求进行组合的,也就是互相调用。
嵌套调用
函数不能嵌套定义,但是可以嵌套调用。
链式访问
把一个函数的返回值作为另一个函数的参数。
printf("%d", printf("%d", printf("%d",43 ) ) ) //打印 4321
//printf 返回值是打印字符的个数,如果打印错误,返回值为负数
函数的声明和定义
函数声明
-
告诉编译器有一个函数叫什么,参数是什么,返回值类型是什么。但具体是不是存在,函数的声明决定不了。
-
函数的声明一般出现在函数的使用之前。要满足先声明后使用。
-
函数的声明一般要放在头文件中。
函数定义
函数的定义是指函数的具体实现,交代函数的功能实现。
一般采用份文件的形式书写:
-
头文件中写函数声明
-
源文件中写函数内容
导入静态库: #pragma comment(lib,"add.lib") add.lib为静态库文件名
函数递归
什么是递归?
-
程序调用自身的编程技巧称为递归
-
一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解
-
只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
-
递归的主要思考方式在于:把大事化小
递归的两个必要条件
-
存在限制条件,当满足这个限制条件的时候,递归便不再继续。
-
每次递归调用之后越来越接近这个限制条件。
每一次函数的调用都会在内存的栈区申请一块空间,如果无限递归,就会出现栈溢出现象。 (stackoverflow)
递归与迭代
-
许多问题是以递归的形式进行解释的,这只是因为它比非递归的形式更为清晰。
-
但是这些问题的迭代实现往往比递归实现效率更高,虽然代码的可读性稍微差些。
-
当一个问题相当复杂,难以用迭代实现时,此时递归实现的简洁性便可以补偿它所带来的运行时开 销。