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

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

相关文章

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

redis数据结构之String详解

《redis数据结构之String详解》Redis以String为基础类型,因C字符串效率低、非二进制安全等问题,采用SDS动态字符串实现高效存储,通过RedisObject封装,支持多种编码方式(如... 目录一、为什么Redis选String作为基础类型?二、SDS底层数据结构三、RedisObject

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda

Django中的函数视图和类视图以及路由的定义方式

《Django中的函数视图和类视图以及路由的定义方式》Django视图分函数视图和类视图,前者用函数处理请求,后者继承View类定义方法,路由使用path()、re_path()或url(),通过in... 目录函数视图类视图路由总路由函数视图的路由类视图定义路由总结Django允许接收的请求方法http

CSS Anchor Positioning重新定义锚点定位的时代来临(最新推荐)

《CSSAnchorPositioning重新定义锚点定位的时代来临(最新推荐)》CSSAnchorPositioning是一项仍在草案中的新特性,由Chrome125开始提供原生支持需... 目录 css Anchor Positioning:重新定义「锚定定位」的时代来了! 什么是 Anchor Pos

mysql递归查询语法WITH RECURSIVE的使用

《mysql递归查询语法WITHRECURSIVE的使用》本文主要介绍了mysql递归查询语法WITHRECURSIVE的使用,WITHRECURSIVE用于执行递归查询,特别适合处理层级结构或递归... 目录基本语法结构:关键部分解析:递归查询的工作流程:示例:员工与经理的层级关系解释:示例:树形结构的数

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

Jackson库进行JSON 序列化时遇到了无限递归(Infinite Recursion)的问题及解决方案

《Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursion)的问题及解决方案》使用Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursi... 目录解决方案‌1. 使用 @jsonIgnore 忽略一个方向的引用2. 使用 @JsonManagedR