数据结构(十一)——递归
一、递归简介
1、递归简介
递归是一种数学上分而自治的思想。
A、将原问题分解为规模较小的问题进行处理
分解后的问题与原问题类型完全相同,当规模较小。
通过小规模问题的解,能够轻易求得原生问题的解
B、问题的分解时有限的
当边界条件不能满足时,分解问题(继续递归)
当边界条件满足时,直接求解(递归结束)
2、递归模型
递归模型的一般表示法:
二、递归的应用
递归在程序设计中的应用
递归函数:
函数体中存在自我调用的函数
递归函数必须有递归出口(边界条件)
函数的无限递归将导致程序崩溃
使用递归函数时不要陷入递归函数的执行细节,应首先建立递归模型和确立边界条件。
1、求和的递归实现
int sum(unsigned int n)
{
int ret;
if(n > 1)
{
ret = n + sum(n - 1);
}
else if(n == 1)
{
ret = 1;
}
return ret;
}
2、斐波那契数列的实现
unsigned int Fibonacci(unsigned int n)
{
unsigned int ret ;
if(2 < n)
{
ret = Fibonacci(n -1) + Fibonacci(n -2);
}
else if((n == 1) || (n == 2))
{
ret = 1;
}
return ret;
}
3、字符串长度的递归实现
int _strlen_(const char* s)
{
int ret = 0;
if(*s != '\0')
{
ret = 1 + _strlen_(s+1);
}
else
{
ret = 0;
}
return ret;
}
代码简化:
unsigned int _strlen_(const char* s)
{
return s?((*s)?(1 + _strlen_(s + 1)):0):0