欢迎来到代码驿站!

C代码

当前位置:首页 > 软件编程 > C代码

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

时间:2022-10-06 11:58:27|栏目:C代码|点击:

一、递归的数学思想

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

递归需要有边界条件

  • 当边界条件不满足时,递归继续进行
  • 当边界条件满足时,递归停止

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

二、递归函数

函数体内部可以调用自己

递归函数

  • 函数体中存在自我调用的函数

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

  • 递归函数必须有递归出口
  • 函数的无限递归将导致程序栈溢出而崩溃

三、递归函数设计技巧

递归模型的一般表示法

四、递归函数设计示例一

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

代码如下:

#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;
}

输出结果如下:

六、递归函数设计示例三

汉诺塔问题

  • 将木块借助 B 柱由 A 柱移动到 C 柱
  • 每次只能移动一个木块
  • 只能出现小木块在大木块之上

汉诺塔问题分解

  • 将 n-1 个木块借助 C 柱由 A 柱移动到 B 柱
  • 将最底层的唯一木块直接移动到 C 柱
  • 将 n-1 个木块借助 A 柱由 B 柱移动到 C 柱

代码如下:

#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代码

下一篇:C++实现五子棋小程序

本文标题:C语言深入分析递归函数的实现

本文地址:http://www.codeinn.net/misctech/215591.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有