服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言递归函数与汉诺塔问题简明理解

C语言递归函数与汉诺塔问题简明理解

2023-02-23 16:16ChampLixxx C/C++

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

递归函数

直接或者间接调用函数本身。“自己调用自己”

什么情况下面可以使用递归呢?

解决一个问题时,解决思路化成与问题本身类似的问题时,“递归”

是不是所有的递归问题,C语言都能支持呢?

不是的

C语言能够解决的递归问题,必须要满足两个条件:

(1) 问题本身一个递归问题。

(2) 递归不能是无限递归

适合那些递归到一定程度时,答案是显而易见的。

一定需要有一个“跳出无限递归的条件”。

C语言是如何支持递归呢?

?
1
2
3
4
5
6
7
8
9
10
11
12
int age(int n) //从425行开始,定义了一个标识符 age
                        //age就表示求第n个人的年龄
        {
            if(n > 1)
            {
                return age(n-1)+2;
            }
            else if(n == 1)
            {
                return 10;
            }
        }

Hanio(汉诺塔)问题

按照Hanio的规则,把n个盘子从A柱移动到C柱上面去,

中间可以利用B柱,需要将其移动的步骤打印出来。

a、确定函数名

Hanio : 一旦被确定,表示 按照Hanio的规则,把n个盘子从A柱移动到C柱上面去,中间可以利用B柱,需要将其移动的步骤打印出来。

b、确定参数

int n , char A , char B , char C

有多少个盘子

从哪里移 起点 A

移到哪儿去 终点 C

中间可以利用 中转站 B

c、确定返回值的类型 无

d、代码、算法具体实现

?
1
2
3
4
5
6
7
8
9
10
11
12
13
void Hanio(int n, char A, char B , char C)
            {
                if(n == 0)
                {
                    return ;
                }
                //1.想办法(Hanio),把n-1个盘子从A柱移动到B柱,中间可以使用C柱
                Hanio(n-1, A ,C , B);
                //2.直接将最后那个盘子,从A柱移动到C柱
                printf("%c -> %c\n", A , C);
                //3.想办法(Hanio),把n-1个盘子从B柱移动到C柱,中间可以使用A柱
                Hanio(n-1, B ,A , C);
            }

求斐波拉契数列的前n项和

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//Get_N : 表示求斐波拉契数列的第n项元素的值
int Get_N(int n)
{
    if(n == 1 || n == 2)
    {
        return 1;
    }
    return Get_N(n-1) + Get_N(n-2);
}
//sum_fei: 求斐波拉契数列的前n项和
    //思路:
        //先求前面的n-1的和,再加上最后一项元素的和
int sum_fei(int n)
{
    if(n == 1)
    {
        return 1;
    }
    return sum_fei(n-1) + Get_N(n);
}

到此这篇关于C语言递归函数与汉诺塔问题简明理解的文章就介绍到这了,更多相关C语言递归函数 内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_46836491/article/details/125583279

延伸 · 阅读

精彩推荐
  • C/C++C++数据结构与算法之判断一个链表是否为回文结构的方法

    C++数据结构与算法之判断一个链表是否为回文结构的方法

    这篇文章主要介绍了C++数据结构与算法之判断一个链表是否为回文结构的方法,结合实例形式分析了回文结构并结合实例给出了C++判断回文的操作技巧,需要...

    难免有错_4012021-05-09
  • C/C++C++ cin.get用法案例详解

    C++ cin.get用法案例详解

    这篇文章主要介绍了C++ cin.get用法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    xusong6402021-12-27
  • C/C++C语言实现控制台版贪吃蛇游戏

    C语言实现控制台版贪吃蛇游戏

    这篇文章主要为大家详细介绍了c语言贪吃蛇控制台版,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    YiLiuF5532021-12-07
  • C/C++Qt 使用 canon edsdk 实现实时预览的示例代码

    Qt 使用 canon edsdk 实现实时预览的示例代码

    这篇文章主要介绍了Qt 使用 canon edsdk 实现实时预览的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    云胡8672021-10-03
  • C/C++深入分析C++中声明与定义的区别

    深入分析C++中声明与定义的区别

    C++学了这么多年你知道为什么定义类时,类的定义放在.h文件中,而类的实现放在cpp文件中。它们为什么能够关联到一起呢?你知道什么东西可以放在.h文件...

    C++教程网12532021-01-30
  • C/C++C++实现LeetCode(124.求二叉树的最大路径和)

    C++实现LeetCode(124.求二叉树的最大路径和)

    这篇文章主要介绍了C++实现LeetCode(124.求二叉树的最大路径和),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参...

    Grandyang10322021-12-03
  • C/C++详解c语言中的 strcpy和strncpy字符串函数使用

    详解c语言中的 strcpy和strncpy字符串函数使用

    strcpy 和strcnpy函数是字符串复制函数。接下来通过本文给大家介绍c语言中的strcpy和strncpy字符串函数使用,感兴趣的朋友跟随小编要求看看吧...

    spring-go5272021-07-02
  • C/C++C语言实现简单的聊天室功能

    C语言实现简单的聊天室功能

    这篇文章主要为大家详细介绍了C语言实现简单的聊天室功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Ywrby3842021-11-19