一、函数的递归调用

1、直接递归:函数自己调用自己;

2、间接递归:在其他函数中调用自己,然后自己再调用其他函数;

3、递归是一种特殊的循环(第五种循环)以消耗大量内存空间为代价;

4、递归思路:要求问题n,依赖于问题对n-1的解读;

5、递归代码实现思路:递推关系;递推结束条件;

6、注意事项:为保证栈区不被装满,要找到使循环停下来的条件(栈区空间消耗殆尽(每递归一次要保护现场后要恢复现场)程序崩溃)。

7、扩:(笔试题)未定义其他变量不使用三大循环求1~100的和:

8、例题:(1)求n的阶乘;

(2)写出斐波那契的第n项并求前n项的和;

(3)汉诺塔(函数不崩溃是因为move函数不递归,最深层次递归63次栈区可容纳(有进有出),递归调用实现汉诺塔)

二、一维数组作为函数参数

1、一维整型数组做参数

形参——写成数组形式,还需要数组长度

实参——数组名,数组长度

2、一般形式写法:传参(数组首元素地址,数组元素个数)

printArray(int a[], int len)

编译器最终理解的形式为:

printArray(int *a, int len)

:数组元素个数先在主函数中算出(在被调函数内部无法根据sizeof(a)计算出元素个数),(指针类型在32位为4字节,在64位为8字节)。

3、当使用数组作为参数传递时传递的是数组首元素地址,是指针传递,可在被调函数中修改主调函数;

4、例题:

(1)数组遍历输出;

(2)函数输出数组元素和与最大值;

(3)数组逆序输出;

(4)函数封装数组的三种排序与查找;

选择排序:

冒泡排序:

插入排序:

二分查找:

三、一维字符型数组作为函数参数

1、一维字符型数组做参数用来存放字符串

形参:数组形式

实参:数组名

2、:因为处理的是字符串,字符串操作的时候不需要考虑数组长度,只需要关注结束标'\0';

3、封装函数实现一些字符串的常用操作:

(1)字符串函数封装遍历输出,小写转大写;

(2)字符串长度

(3)复制字符串

(4)拼接字符串;

(5)比较字符串大小;

(7)字符串逆序;

四、练习

1、编写程序实现void itoa(char s[], int n);实现整型转字符串;

输出结果:

2、编写程序实现int atoi(char s[]),实现字符串转整型;

输出结果:

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐