iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言深入分析递归函数的实现
  • 357
分享到

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

2024-04-02 19:04:59 357人浏览 薄情痞子
摘要

目录一、递归的数学思想二、递归函数三、递归函数设计技巧四、递归函数设计示例一五、递归函数设计示例二六、递归函数设计示例三七、小结一、递归的数学思想 递归是一种数学上分而自治的思想 递

一、递归的数学思想

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

递归需要有边界条件

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

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

二、递归函数

函数体内部可以调用自己

递归函数

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

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

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

三、递归函数设计技巧

递归模型的一般表示法

四、递归函数设计示例一

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

代码如下:

#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语言 递归函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

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

本文链接: https://www.lsjlt.com/news/146210.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言深入分析递归函数的实现
    目录一、递归的数学思想二、递归函数三、递归函数设计技巧四、递归函数设计示例一五、递归函数设计示例二六、递归函数设计示例三七、小结一、递归的数学思想 递归是一种数学上分而自治的思想 递...
    99+
    2022-11-13
  • c语言深入理解函数的递归
    前言:  首先,递归是什么,递归就是在定义函数时,然后在函数里调用这个函数,通俗讲,就是函数自己调用自己。那么递归的好处是什么呢?它能够将复杂的问题,用少量的代码来表示,增加了代码的...
    99+
    2022-11-13
  • C语言中函数递归的示例分析
    这篇文章主要介绍C语言中函数递归的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是递归?递归(recursion):程序调用自身的一种编程技巧。如何理解函数递归:从调用自身层面:函数递归就是函数自己调用自...
    99+
    2023-06-29
  • C语言递归函数如何实现
    这篇文章主要介绍“C语言递归函数如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言递归函数如何实现”文章能帮助大家解决问题。一、递归的数学思想递归是一种数学上分而自治的思想递归需要有边界条...
    99+
    2023-06-30
  • C语言深入探索递归的特点
    目录递归的认识main函数可以递归吗递归核心思想讲解递归的缺点递归的认识 基本认识: 1.首先递归的本质还是函数调用,也要形成和释放栈帧。 2.函数的调用是有成本的,这个成本在时间和...
    99+
    2022-11-13
  • C语言的递归函数详解
    目录函数递归什么是递归?递归的俩个必要条件代码引例1栈溢出(Stack Overflow)合理使用递归代码引例3代码引例4解释要合理使用递归总结函数递归 程序调用自身的编程技巧称为递...
    99+
    2022-11-12
  • C语言用递归函数实现汉诺塔
    目录汉诺塔(Hanoi)是什么?那么,C语言如何实现汉诺塔呢?汉诺塔的基本思路是:具体代码见下(注意点在代码下面):总结汉诺塔(Hanoi)是什么? 一个简单的汉诺塔就如上图所示...
    99+
    2022-11-13
  • C语言深入浅出分析函数指针
    我们先看一个代码: #include<stdio.h> void test() { printf("haha\n"); } int main() { printf("...
    99+
    2022-11-13
  • C语言深入分析函数与宏的使用
    目录一、函数与宏二、宏的妙用三、小结一、函数与宏 宏是由预处理器直接替换展开的,编译器不知道宏的存在函数是由编译器直接编译的实体,调用行为由编译器决定多次使用宏会导致最终可执行程序的...
    99+
    2022-11-13
  • C语言运用函数的递归实现汉诺塔
    目录1、汉诺塔是如何实现的2、汉诺塔问题画图详解3、汉诺塔问题代码解释总结1、汉诺塔是如何实现的 下面是有三个盘子的示例: 从左到右一次是 A柱 B柱 C柱 A柱:起始位置 B柱:...
    99+
    2022-11-13
  • C语言函数的递归调用详情
    目录一、什么是递归二、递归与迭代一、什么是递归 程序调用自身的编程技巧称为递归( recursion) 。递归做为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直...
    99+
    2022-11-13
  • C语言函数的递归怎么调用
    这篇文章主要讲解了“C语言函数的递归怎么调用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言函数的递归怎么调用”吧!一、什么是递归程序调用自身的编程技巧称为递归( recursion) ...
    99+
    2023-06-30
  • Go语言递归函数如何实现
    本篇内容介绍了“Go语言递归函数如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!很对编程语言都支持递归函数,Go语言也不例外,所谓递归...
    99+
    2023-07-05
  • Go语言递归函数的具体实现
    目录斐波那契数列数字阶乘多个函数组成递归很对编程语言都支持递归函数,Go语言也不例外,所谓递归函数指的是在函数内部调用函数自身的函数,从数学解题思路来说,递归就是把一个大问题拆分成多...
    99+
    2023-05-14
    Go语言递归函数
  • C语言怎么运用函数的递归实现汉诺塔
    这篇文章主要讲解了“C语言怎么运用函数的递归实现汉诺塔”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言怎么运用函数的递归实现汉诺塔”吧!1、汉诺塔是如何实现的下面是有三个盘子的示例:从左...
    99+
    2023-07-02
  • C语言函数返回值与参数传递实例分析
    本篇内容介绍了“C语言函数返回值与参数传递实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一:参数传...
    99+
    2022-10-19
  • C语言函数的基本使用和递归小结
    本章目标 秃头侠们好呀,今天我们一起学习函数! 目标: 本章主要掌握函数的基本使用和递归 函数是什么 数学中我们常见到函数的概念。但是你了解C语言中的函数吗? 维基百科中对函数的定义...
    99+
    2022-11-12
  • C语言函数的基本使用和递归详解
    目录本章目标函数是什么C语言中函数的分类库函数如何学会使用库函数?自定义函数函数的参数函数的调用:函数的嵌套调用和链式访问嵌套调用链式访问函数的声明和定义函数递归什么是递归?递归的两...
    99+
    2022-11-12
  • c语言函数的递归调用方法是什么
    C语言函数的递归调用方法是指在函数内部调用自身的过程。递归调用函数可以让程序重复执行相同的操作,直到满足某个条件才停止。递归调用函数...
    99+
    2023-09-04
    c语言
  • C语言的div()函数实例分析
    本文小编为大家详细介绍“C语言的div()函数实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言的div()函数实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作