递归的数学思想
-
递归是一种数学上分而自治的思想
-
递归需要有边界条件
- 当边界条件不满足时,递归继续进行
- 当边界条件满足时,递归停止
-
递归将大型复杂问题转化为与原问题相同但规模较小的问题进行处理
递归函数
- 函数体内部可以调用自己
- 递归函数
- 函数体中存在自我调用的函数
- 递归函数是递归的数学思想在程序设计中的应用
- 递归函数必须有递归出口
- 函数的无线递归将导致程序栈溢出而崩溃
递归函数设计技巧
递归模型的一般表示法
n是问题规模,f是解决方法
递归函数设计示例一
用递归的方法编写函数求字符串长度
例子1:递归版strlen
#include <stdio.h>
int strlen_r(const char* s)
{
if( *s )
{
return 1 + strlen_r(s+1);
}
else
{
return 0;
}
}
int main()
{
printf("%d
", strlen_r("abc"));
printf("%d
", strlen_r(""));
return 0;
}
递归函数设计示例二
斐波拉契数列递归解法
#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
", fac(1));
printf("%d
", fac(2));
printf("%d
", fac(9));
return 0;
}
小结
- 递归是一种将问题分而自治的思想
- 用递归解决问题首先要建立递归的模型
- 递归解法必须要有边界条件,否则无解