【C】 递归函数分析

递归的数学思想

递归是一种数学上分而自治的思想
递归需要有边界条件
当边界条件不满足时,递归继续进行
当边界条件满足时,递归停止

递归函数

函数体内部可以调用自己
递归函数
函数体中存在自我调用的函数
递归函数是递归的数学思想在程序设计中的应用
递归函数必须有递归出口
函数的无限递归将导致程序栈溢出而崩溃

递归函数设计示例一

用递归的方法编写函数求字符串长度

“D.T.software”
strlen(s) = 1 + strlen(s + 1) *s != '0'
strlen(s) = 0 *s == '0'
例子47-1:

#include "stdio.h"
int strlen_r(char *s)
{
    if(*s != '\0')
    {
        return 1 + strlen_r(s+1);
    }
    else
    {
        return 0;
    }
}
int main()
{
    printf("%d\n",strlen_r("abc"));
    printf("%d\n",strlen_r(""));
    return 0;
}

输出结果:

3
0

递归函数设计示例二

斐波拉契数列递归解法
-1,1,2,3,5,8,13,21,...
数学公式:
fac(n) = fac(n-1) + fac(n-2) n>=3;
fac(n) = 1 n==2;
fac(n) = 1 n==1;
例子47-2:

#include "stdio.h"
int fac(int n)
{
    if(n == 1)
    {
        return 1;
    }
    else if(n == 2)
    {
        return 1;
    }
    else if(n >= 3)
    {
        return fac(n - 1) + fac(n - 2);
    }
} 
int main()
{
    printf("%d\n",fac(1));
    printf("%d\n",fac(2));
    printf("%d\n",fac(5));
    return 0;
}

输出结果:

1
1
5

小结

递归是一种将问题分而自治的思想
用递归解决问题首先要建立递归的模型
递归解法必须要有边界条件,否则无解

你可能感兴趣的