1、递归函数
- 函数体内部可以调用自己
- 递归函数
— 函数体中存在自我调用的函数 - 递归函数是递归的数学思想在程序设计中的应用
— 递归函数必须有递归出口
— 函数的无限递归将导致程序栈溢出而崩溃
2、递归函数设计示例一
- 用递归的方法编写函数求字符串长度
#include <stdio.h>
#include <malloc.h>
int strlen(const char* s)
{
return (*s != '\0') ? (strlen(s + 1) + 1) : 0;
}
int main()
{
printf("len = %d\n", strlen("xiebs"));
return 0;
}
3、递归函数设计示例二
- 斐波拉契数列递归解法
1,1,2,3,5,8,13,21…
#include <stdio.h>
int fac(int n)
{
if (n == 1)
{
return 1;
}
else if (n == 2)
{
return 1;
}
else
{
return fac(n - 1) + fac(n - 2);
}
return -1;
}
int main()
{
printf("%d\n", fac(5));
printf("%d\n", fac(8));
return 0;
}
3、递归函数设计示例三
- 汉诺塔问题
— 将木块借助B柱由A柱移动到C柱
— 每次只能移动一个木块
— 只能出现小木块在大木块上
#include <stdio.h>
void han_move(int n,char a,char b,char c)
{
if (1 == n)
{
printf("%c--->%c\n", a, c);
}
else
{
han_move(n - 1, a, c, b);
han_move(1, a, b, c);
han_move(n - 1, b, a, c);
}
}
int main()
{
han_move(3, 'a', 'b', 'c');
return 0;
}