递归
汉诺塔代码:
1.问题n 和 问题n-1 直接的递推关系
2.结束条件
递归过程
1、 将n-1个盘子从 A -> B //递归
2、 将剩下的那个盘子从A->C
3、 将n-1个盘子从B->C //递归
结束条件
看 n == 1 //A->C
起始 辅助 目标
n个盘子 A B C
n-1 A C B
hanoi(3,'A','B','C')
|---hanoi(2,'A','C','B');
|---hanoi(1,'A','B','C');
|---move('A','C'); //1 A-->C
|---move('A','B'); //起始 目标//2 A-->B
|---hanoi(1,'C','A','B');
|---move('C','B'); //3 C-->B
|---move('A','C'); //4 A-->C
|---hanoi(2,'B','A','C');
|---hanoi(1,'B','C','A');
|---move('B','A'); //5 B-->A
|---move('B','C'); //起始 目标//6 B-->C
|---hanoi(1,'A','B','C');
|---move('A','C'); //7 A-->C
代码:
整型数组作为函数参数
形参能不写成数组形式,实参能不能传递数组过去
int max(int a,int b)
{
}
int a[10] = {1,2,3,4};
数组元素
a[0] //数组元素 就是int型变量
要传递整个数组
//想要把整个数组的数据传递过去
数据类型 角度
a //数组名
数据类型 int[10]
形参 intx[10]
void printArray(int x[10]) //形参? ---实参该咋传
{
}
数组传参本质
整型一维数组
void printArray(int x[10]) //形参? ---实参该咋传
void printArray(int *x)//编译器是这么看的? int *表示是指针类型
{
}
[小结]
1.整型一维数组作为函数参数
形参
//形式上 ---数组形式
printArray(int a[],int len) //需要一个数组形式的形参和数组长度的形参
//本质上---指针变量(编译器理解的本质)
printArray(int *a,int len) //指针变量 用来接收数组首元素的地址
实参
printArray(数组名,数组长度) //实参传递 要传数组名 和 数组长度
//数组名 从代表值的角度 代表的是首元素的地址
练习:
找出最大值
输入10个数
找出最大值
说明:
函数传参 ---实参 给到 形参 ,实际上是将实参的值 给到 形参变量
值传递
地址传递
练习:
逆序
进行交换,修改的实际上主函数 数组a空间中的数据
练习:
排序
选择排序
练习:
查找
字符型一维数组
字符型一维数组 --- 用来存放一个字符串
语法点:
字符型 一维数组 做函数参数
形参 数组形式 //不需要数组长度---字符串本身有结束标志
实参 数组名
练习
二维数组作为函数参数
整型:
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
void printArray(int a[3][4]) //形参可以写成数组的形式
void printArray(int(*a)[4]) //本质编译器还是当作指针看的
二维数组的本质
一维数组的一维数组
void printArray(int[4] a[3]) //形参 可以写成数组的形式
void printArray(int[4] *a) //本质编译器还是当作指针看的
注意:
二维数组作为函数参数
形参 二维数组形式 行数的变量
实参 二维数组数组名 行数的值