函数的思想:拆
把各个功能拆开,把大问题化解为小问题。
栈:先进后出。
堆:
1. 空间很大
2. 手动申请,手动释放
汉诺塔的递归思想
#include <stdio.h>
void move(int n ,int pole1,int pole2)
{
static int step = 1;
printf("%03d:[disk %d] : %c --> %c\n",step++,n,pole1,pole2);
}
//璧峰鏌? 杈呭姪鏌? 鐩爣鏌?void hanoi(int n, int A, int B, int C)
{
if (1==n)
{
move(n,A,C);
}else
{
hanoi(n-1,A,C,B);//n-1 鍏堟尓璧? puts("-------");
move(n,A,C); // 灏嗙n涓?鎸埌 鐩爣鏌?
puts("-------");
hanoi(n-1,B,A,C);
}
}
//n = 3;
//hanoi(2,'A','C','B')
// | --------------------> hanoi(1,'A','B','C')
// move(2,'A','B'); [2:A->B]
// |----------------------->move(1,'A','C') [1:A->C]
//move(3,'A','C'); -----> [3:A->C]
//hanoi(2,'B','A','C');
int main(void)
{
int n = 0;
printf("Input numbers of disk: ");
scanf("%d",&n);
hanoi(n,'A','B','C');
return 0;
}
//情况1
数组元素作为函数参数
注意:
//1.数组元素的类型 是否 与形参类型一致
//情况2
想把整个数组传入到函数中
//形参 和 实参 规则
1.个数相同
2.类型匹配
3.一一对应