千家信息网

C语言递归函数如何实现

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章主要介绍"C语言递归函数如何实现"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"C语言递归函数如何实现"文章能帮助大家解决问题。一、递归的数学思想递归是
千家信息网最后更新 2024年11月11日C语言递归函数如何实现

这篇文章主要介绍"C语言递归函数如何实现"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"C语言递归函数如何实现"文章能帮助大家解决问题。

一、递归的数学思想

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

递归需要有边界条件

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

  • 当边界条件满足时,递归停止

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

二、递归函数

函数体内部可以调用自己

递归函数

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

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

  • 递归函数必须有递归出口

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

三、递归函数设计技巧

递归模型的一般表示法

四、递归函数设计示例一

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

代码如下:

#include  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  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  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语言递归函数如何实现"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

0