C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C语言 递归函数

C语言深入分析递归函数的实现

作者:清风自在 流水潺潺

递归(recursive)函数是“自己调用自己”的函数,无论是采用直接或间接调用方式。间接递归意味着函数调用另一个函数(然后可能又调用第三个函数等),最后又调用第一个函数。因为函数不可以一直不停地调用自己,所以递归函数一定具备结束条件

一、递归的数学思想

递归是一种数学上分而自治的思想

递归需要有边界条件

递归将大型复杂问题转化为与原问题相同但规模较小的问题进行处理。

二、递归函数

函数体内部可以调用自己

递归函数

递归函数是递归的数学思想在程序设计中的应用

三、递归函数设计技巧

递归模型的一般表示法

四、递归函数设计示例一

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

代码如下:

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

输出结果如下:

五、递归函数设计示例二

斐波拉契数列递归解法

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(1));
    printf("%d\n", fac(2));
    printf("%d\n", fac(9));
    
    return 0;
}

输出结果如下:

六、递归函数设计示例三

汉诺塔问题

汉诺塔问题分解

代码如下:

#include <stdio.h>
 
void han_move(int n, char a, char b, char c)
{
    if( n == 1 )
    {
        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;
}

输出结果如下:

七、小结

到此这篇关于C语言深入分析递归函数的实现的文章就介绍到这了,更多相关C语言 递归函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文