数据结构之递归小练习(定义,阶乘,求和,汉诺塔)

2024-06-19 17:18

本文主要是介绍数据结构之递归小练习(定义,阶乘,求和,汉诺塔),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

递归定义;程序直接或间接调用自己,叫做递归。

成为递归的条件:1.要操作的数据规模一直减小,一般而言就是解决n问题必须解决n-1的问题2.必须有一个明确的终止条件。3.每一次的操作都相同,当前的数据和n-1个数据的关系都相同。

小例子:

1.用递归的思想求阶乘:

#include<stdio.h>

long fn(int n);

int main()
{
    int r;
    int n;
    printf("请输入一个自然数:\n");
    scanf("%d",&n);
    r=fn(n);
    printf("%d的阶乘为%ld\n",n,r);
    return 0;
}

long fn(int n)
{
    if(n==1)
    {    
        return 1;
    }
    else
    {
        return n*fn(n-1);
    }
}


2.用递归的思想求和

#include<stdio.h>

long fn(int n);

int main()
{
    int r;
    int n;
    printf("请输入一个自然数:\n");
    scanf("%d",&n);
    r=fn(n);
    printf("0-%d之内为%ld\n",n,r);
    return 0;
}

long fn(int n)
{
    if(n==1)
    {    
        return 1;
    }
    else
    {
        return n+fn(n-1);
    }
}

3.汉诺塔

#include<stdio.h>

void hannuota(int n,char a,char b,char c);

int main()
{
    int n;
    char a='A',b='B',c='C';
    printf("请输入盘子总数\n");
    scanf("%d",&n);
    hannuota(n,a,b,c);
    return 0;
}

void hannuota(int n,char a,char b,char c)
{
    if(n==1)
    {
        printf("%c柱子上的盘子移向%c\n",a,c);
    }
    else
    {
        hannuota(n-1,a,c,b);
        printf("%c柱子上的盘子移向%c\n",a,c);
        hannuota(n-1,b,a,c);
    }
}

这篇关于数据结构之递归小练习(定义,阶乘,求和,汉诺塔)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1075652

相关文章

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测 目录 时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测基本介绍程序设计参考资料 基本介绍 MATLAB实现LSTM时间序列未来多步预测-递归预测。LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为

通俗范畴论4 范畴的定义

注:由于CSDN无法显示本文章源文件的公式,因此部分下标、字母花体、箭头表示可能会不正常,请读者谅解 范畴的正式定义 上一节我们在没有引入范畴这个数学概念的情况下,直接体验了一个“苹果1”范畴,建立了一个对范畴的直观。本节我们正式学习范畴的定义和基本性质。 一个范畴(Category) C𝐶,由以下部分组成: 数据: 对象(Objects):包含若干个对象(Objects),这些

【数据结构】线性表:顺序表

文章目录 1. 线性表2. 顺序表2.1 概念及结构2.2 接口实现2.3 顺序表的问题及思考 1. 线性表 线性表是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式

数据结构9——排序

一、冒泡排序 冒泡排序(Bubble Sort),顾名思义,就是指越小的元素会经由交换慢慢“浮”到数列的顶端。 算法原理 从左到右,依次比较相邻的元素大小,更大的元素交换到右边;从第一组相邻元素比较到最后一组相邻元素,这一步结束最后一个元素必然是参与比较的元素中最大的元素;按照大的居右原则,重新从左到后比较,前一轮中得到的最后一个元素不参4与比较,得出新一轮的最大元素;按照上述规则,每一轮结

利用结构体作为函数参数时结构体指针的定义

在利用结构体作为函数的参数进行传递时,容易犯的一个错误是将一个野指针传给函数导致错误。 #include <stdio.h>#include <math.h>#include <malloc.h>#define MAXSIZE 10typedef struct {int r[MAXSIZE]; //用于存储要排序的数组,r[0]作为哨兵或者临时变量int length;

算法与数据结构面试宝典——回溯算法详解(C#,C++)

文章目录 1. 回溯算法的定义及应用场景2. 回溯算法的基本思想3. 递推关系式与回溯算法的建立4. 状态转移方法5. 边界条件与结束条件6. 算法的具体实现过程7. 回溯算法在C#,C++中的实际应用案例C#示例C++示例 8. 总结回溯算法的主要特点与应用价值 回溯算法是一种通过尝试各种可能的组合来找到所有解的算法。这种算法通常用于解决组合问题,如排列、组合、棋盘游

C++ 重建二叉树(递归方法)

/*** struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* };*/#include <vector>class Solution {public:/*** 代码

嵌入式学习——数据结构(哈希、排序)——day50

1. 查找二叉树、搜索二叉树、平衡二叉树 2. 哈希表——人的身份证——哈希函数 3. 哈希冲突、哈希矛盾 4. 哈希代码 4.1 创建哈希表 4.2  5. 算法设计 5.1 正确性 5.2 可读性(高内聚、低耦合) 5.3 健壮性 5.4 高效率(时间复杂度)时间复杂度越低,效率越高, 5.5 低储存(空间复杂度)空间复杂度越低,存储空间越少 6.排序算法 6.1 冒

【数据结构与算法 经典例题】使用队列实现栈(图文详解)

💓 博客主页:倔强的石头的CSDN主页               📝Gitee主页:倔强的石头的gitee主页    ⏩ 文章专栏:《数据结构与算法 经典例题》C语言                                   期待您的关注 ​​ 目录  一、问题描述 二、前置知识 三、解题思路 四、C语言实现代码 🍃队列实现代码:

数据结构:二叉树详解 c++信息学奥赛基础知识讲解

目录 一、二叉树的定义 二、二叉树的形态 三、二叉树的性质 四、二叉树的存储 五、二叉树的创建与遍历(递归) 六、二叉树实现 创建二叉树 展示二叉树 1、计算数的高度 2、计算数的叶子数量 3、计算数的宽度 4、层次遍历 5、前序遍历 递归写法 非递归写法 6、中序遍历 递归写法 非递归写法 7、后序遍历 递归写法 非递归写法 8、输出根节点到所有叶