嵌入式开发学习日志Day11
一、函数的递归调用
在调用一个函数的过程中,又出现直接或者间接的调用函数本身,称之为函数的递归调用;
函数的递归调用是使用大量的内存空间完成程序进行的;
1.间接调用
2.直接调用
注意: 上图仅为示意,不可以这样使用;这样使用会导致栈区空间被填满,之后数据无法入栈,程序崩溃
eg:(1)输入一个数,打印该数的菲伯利亚数列
程序:
(2)输入一个n,求n的阶乘;
程序:
(3)求第n个数的菲伯利亚数列的值;
程序:
(4)汉诺塔问题:
分
n:1 | 步骤 | 盘号 | 从 | 到 |
1 | 1 | A | C |
n:2 | 步骤 | 盘号 | 从 | 到 |
1 | 1 | A | B | |
2 | 2 | A | C | |
3 | 1 | A | B |
n:3 | 步骤 | 盘号 | 从 | 到 |
1 | 1 | A | C | |
2 | 2 | A | B | |
3 | 1 | C | B | |
4 | 3 | A | C | |
5 | 1 | B | A | |
6 | 2 | B | C | |
7 | 1 | A | C |
程序:
二、 数组作为函数参数
数组传递两个参数:数组名(数组首元素地址) 和 数组长度
数组名中传递的为数组的首元素地址,所以,当数组名作为实参时,被调用函数可以修改主调函数的值;
eg:
(1)求一个数组中所有元素的和;
程序:
(2) 求一个数组中的最大值;
程序:
(3)逆序输出一个数组;
程序:
(4) 用二分查找法查找数组中的元素;
程序:
(5)将小写字符转换为大写字符,函数部分;
程序:
(6) 输出字符串的函数部分;
程序:
(7) 几种string的函数部分;
程序:
(8)将字符数组中的值但需输出;
程序:
三、课后练习
1、编写程序实现int atoi(char s[]),实现字符串转整型;
程序:
运行结果:
2、编写程序实现void itoa(char s[], int n);实现整型转字符串;
程序:
运行结果:
3、用函数实现选择,冒泡和插入法排序。
(1)选择排序法
程序:
(2)冒泡排序:
程序:
(3)插入排序:
程序:
运行结果: