函数调用时的栈
活动记录
函数调用过程
程序中的栈
程序的栈溢出
顺序栈必须指定大小,一旦超过就会溢出
最后依次弹出
小结
递归的应用实战一
斐波拉契数列的数学解法 1 1 2 3 5 8 13
strlen递归解法
汉诺塔问题解法
全排列的递归解法
递推关系:
#include <stdio.h>
//int b 起始位置 e 结束位置
void permutation(char s[], int b, int e)
{
if( (0 <= b) && (b <= e) )
{
if( b == e )
{
printf("%s\n", s);
}
else
{
int i = 0;
for(i=b; i<=e; i++)
{
char c = s[b]; //交换数据
s[b] = s[i];
s[i] = c;
permutation(s, b+1, e);
c = s[b]; //再把数据交换会来
s[b] = s[i];
s[i] = c;
}
}
}
}
int main()
{
char s[] = "abcd";
permutation(s, 0, 3);
return 0;
}
小结
递归的应用实战二
八皇后问题
分三个方向检查
代码:
小结
递归是回溯算法的重要实现方式
思考:
类似八皇后
标记数组相当于地图
是否可以找到迷宫所有起点到终点的通道?