当前位置: 首页 > news >正文

【头歌实训:递归实现斐波那契数列】

头歌实训:递归实现斐波那契数列

文章目录

  • 任务描述
  • 相关知识
    • 递归相关知识
      • 递归举例
      • 何时使用递归
        • 定义是递归的
        • 数据结构是递归的
        • 问题的求解方法是递归的
  • 编程要求
  • 测试说明
  • 源代码:

任务描述

本关任务:递归求解斐波那契数列。

相关知识

为了完成本关任务,你需要掌握:1.什么是递归,2.如何编写递归算法。

递归相关知识

在数学与计算机科学中,递归(recursion)是指在函数的定义中又调用函数自身的方法。若p函数定义中调用p函数,称之为直接递归;若p函数定义中调用q函数,而q函数定义中又调用p函数,称之为间接递归。任何间接递归都可以等价地转化为直接递归。
如果一个递归过程或递归函数中的递归调用语句是最后一条执行语句,则称这种递归调用为尾递归。

递归举例

下面是递归求n(正整数)的阶乘的递归算法。

int fun(int n){
if(n == 1) //语句1
return 1; //语句2
else //语句3
return n * fun(n - 1);//语句4
}
在函数fun(n)的求解过程中直接调用fun(n-1)(语句4),所以它是一个直接递归函数;又由于递归调用是最后一条语句,所以它又属于尾递归。
递归算法通常把一个大的复杂问题层层转化为一个或多个与原问题相似的规模较小的问题来求解,递归策略只需少量的代码就可以描述出解题过程所需要的多次重复计算,大大减少了算法的代码量。
一般来说,能够用递归解决的问题应该满足以下3个条件:

需要解决的问题可以转化为一个或多个子问题来求解,而这些子问题的求解方法与原问题完全相同,只是在数量规模上不同。
递归调用的次数必须是有限的。
必须有结束递归的条件来终止递归。

何时使用递归

在以下3种情况下经常要用到递归的方法。

定义是递归的

有许多数学公式、数列和概念的定义是递归的,例如求n!和斐波那契( Fibonacci)数列等。对于这些问题的求解过程,可以将其递归定义直接转化为对应的递归算法,例如求n!可以转化为上面的递归算法。

数据结构是递归的

算法是用于数据处理的,有些存储数据的数据结构是递归的,对于递归数据结构,采用递归的方法设计算法既方便又有效。
例如,单链表就是一种递归数据结构,其结点类型声明如下:

/* 单链表结点类型定义 */
typedef struct Node
{
int data;
struct Node *next;
} LinkNode;
其中,结构体Node的声明中用到了它自身,即指针域next是一种指向自身类型的指针。图1所示为一个不带头结点的单链表L的一般结构,L标识整个单链表,而L->next标识除了结点L以外其他结点构成的单链表,两种结构是相同的,所以它是一种递归
数据结构。
在这里插入图片描述

图1 不带头结点单链表L示意图

对于这样的递归数据结构,采用递归方法求解问题十分方便。例如,求一个不带头结点的单链表L的所有data域(假设为int型)之和的递归算法如下:

int Sum(LinkNode *L)
{
if (L == NULL)
return 0;
else
return (L->data + Sum(L->next));
}

问题的求解方法是递归的

有些问题的解法是递归的,典型的如梵塔问题的求解。

编程要求

本题要求实现一个递归函数int fib(int n),返回斐波那契数列的第n项。例如如果n=5,则该函数应该返回5。

注:该数列的前面几项是: 1 1 2 3 5 8 13 21 34 …

根据提示,在右侧编辑器补充代码,计算并输出斐波那契数列第n项的值。

测试说明

平台会对你编写的代码进行测试:

测试输入:5
预期输出:5

测试输入:1
预期输出:1

提示:

1 <= n <= 46

开始你的任务吧,祝你成功!

源代码:

 
#include <stdio.h>/*** @Param(n):1<=n<=46* 功能:返回斐波那契数列的第n项*/
int fib(int n)
{/******************** begin ********************//*if(n == 1 || n == 2) return (1);  //斐波那契数列第一二项为1return (fib(n - 1) + fib(n - 2));  //当从第三项开始为前两项的和*/if(n==1 ||n==2)return 1;else if(n==3) return 2;else if(n==4) return 3;else if(n==5) return 5;else if(n==6) return 8;else if(n==7) return 13;else if(n==8) return 21;else if(n==9) return 34;else if(n==10) return 55;else if(n==11) return 89;else if (n<=46) return fib(n-1)+fib(n-2);/******************** end **********************/  
}int main(int argc, char const *argv[])
{int n;while (scanf("%d", &n) != EOF) {printf("%d\n", fib(n));}return 0;
}

相关文章:

【头歌实训:递归实现斐波那契数列】

头歌实训&#xff1a;递归实现斐波那契数列 文章目录 任务描述相关知识递归相关知识递归举例何时使用递归定义是递归的数据结构是递归的问题的求解方法是递归的 编程要求测试说明源代码&#xff1a; 任务描述 本关任务&#xff1a;递归求解斐波那契数列。 相关知识 为了完成…...

IntelliJ IDEA配置(mac版本)

用惯了eclipse开发java的小伙伴们&#xff0c;初次接触IntelliJ IDEA可能会和我一样&#xff0c;多少有些不适感&#xff0c;在使用过程中总想着eclipse得对应功能。 接下来&#xff0c;我就总结下我日常开发中遇到的常用配置&#xff08;不包括快捷键&#xff0c;我认为每个人…...

CSAPP Cache Lab(缓存模拟器)

前言 理解高速缓存对 C 程序性能的影响&#xff0c;通过两部分实验达成&#xff1a;编写高速缓存模拟器&#xff1b;优化矩阵转置函数以减少高速缓存未命中次数。Part A一开始根本不知道要做什么&#xff0c;慢慢看官方文档&#xff0c;以及一些博客&#xff0c;和B站视频&…...

【机器学习】机器学习的基本分类-监督学习-逻辑回归-对数似然损失函数(Log-Likelihood Loss Function)

对数似然损失函数&#xff08;Log-Likelihood Loss Function&#xff09; 对数似然损失函数是机器学习和统计学中广泛使用的一种损失函数&#xff0c;特别是在分类问题&#xff08;例如逻辑回归、神经网络&#xff09;中应用最为广泛。它基于最大似然估计原理&#xff0c;通过…...

51c自动驾驶~合集35

我自己的原文哦~ https://blog.51cto.com/whaosoft/12206500 #纯视觉方案的智驾在大雾天还能用吗&#xff1f; 碰上大雾天气&#xff0c;纯视觉方案是如何识别车辆和障碍物的呢&#xff1f; 如果真的是纯纯的&#xff0c;特头铁的那种纯视觉方案的话。 可以简单粗暴的理解为…...

网络安全体系与网络安全模型

4.1 网络安全体系概述 4.1.1 网络安全体系概述 一般面言&#xff0c;网络安全体系是网络安全保障系统的最高层概念抽象&#xff0c;是由各种网络安全单元按照一定的规则组成的&#xff0c;共同实现网络安全的目标。网络安全体系包括法律法规政策文件、安全策略、组织管理、技术…...

antd table 自定义表头过滤表格内容

注意&#xff1a;该功能只能过滤可一次性返回全部数据的表格&#xff0c;通过接口分页查询的请自主按照需求改动哈~ 实现步骤&#xff1a; 1.在要过滤的列表表头增加过滤图标&#xff0c;点击图标显示浮窗 2.浮窗内显示整列可选选项&#xff0c;通过勾选单选或者全选、搜索框来…...

Elasticsearch实战:从搜索到数据分析的全面应用指南

Elasticsearch&#xff08;简称 ES&#xff09;是一个强大的分布式搜索引擎和分析工具&#xff0c;它能够快速处理海量数据&#xff0c;并提供全文检索、结构化搜索、数据分析等功能。在现代系统中&#xff0c;它不仅是搜索的核心组件&#xff0c;也是数据分析的有力工具。 本文…...

BEPUphysicsint定点数3D物理引擎介绍

原文&#xff1a;BEPUphysicsint定点数3D物理引擎介绍 - 哔哩哔哩 帧同步的游戏中如果用物理引擎&#xff0c;为了保证不同设备上的结果一致,需要采用定点数来计算迭代游戏过程中的物理运算。也就是我们通常说的定点数物理引擎(确定性物理引擎)。本系列教程给大家详细的讲解如…...

宠物领养平台构建:SpringBoot技术路线图

摘 要 如今社会上各行各业&#xff0c;都在用属于自己专用的软件来进行工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。互联网的发展&#xff0c;离不开一些新的技术&#xff0c;而新技术的产生往往是为了解决现有问题而产生的。针对于宠物领养…...

解决Flink读取kafka主题数据无报错无数据打印的重大发现(问题已解决)

亦菲、彦祖们&#xff0c;今天使用idea开发的时候&#xff0c;运行flink程序&#xff08;读取kafka主题数据&#xff09;的时候&#xff0c;发现操作台什么数据都没有只有满屏红色日志输出&#xff0c;关键干嘛&#xff1f;一点报错都没有&#xff0c;一开始我觉得应该执行程序…...

python自动化测开面试题汇总(持续更新)

介绍他们测某云&#xff0c;底层是linux可以挂多个磁盘&#xff0c;有现有的接口&#xff0c;用python实现热插拔&#xff0c;查看它的功能&#xff0c;项目目前用到的是python,linux和虚拟云&#xff0c;结合你之前的项目介绍下三者(3min之内) 列表判断是否有重复元素 求1-9的…...

1-1 Gerrit实用指南

注&#xff1a;学习gerrit需要拥有git相关知识&#xff0c;如果没有学习过git请先回顾git相关知识点 黑马程序员git教程 一小时学会git git参考博客 git 实操博客 1.0 定义 Gerrit 是一个基于 Web 的代码审查系统&#xff0c;它使用 Git 作为底层版本控制系统。Gerrit 的主要功…...

docker如何安装redis

第一步 如果未指定redis&#xff0c;则安装的是最新版的 docker pull redis 创建一个目录 mkdir /usr/local/docker/redis 然后直接可以下载redis&#xff0c;这是方式确实不怎么好&#xff0c;应该找在官网上找对应的redis配置文件 wget http://download.redis.io/redis-stab…...

省级新质生产力数据(蔡湘杰版本)2012-2022年

测算方式&#xff1a;参考《当代经济管理》蔡湘杰&#xff08;2024&#xff09;老师研究的做法&#xff0c;本文以劳动者、劳动对象和劳动资料为准则层&#xff0c;从新质生产力“量的积累、质的提升、新的拓展”三维目标出发&#xff0c;构建新质生产力综合评价指标体系&#…...

【游资悟道】-作手新一悟道心法

作手新一经典语录节选&#xff1a; 乔帮主传完整版&#xff1a;做股票5年&#xff0c;炼成18式&#xff0c;成为A股低吸大神&#xff01;从小白到大神&#xff0c;散户炒股的六个过程&#xff0c;不看不知道自己水平 围着主线做&#xff0c;多研究龙头&#xff0c;研究涨停&am…...

Diffusion中的Unet (DIMP)

针对UNet2DConditionModel模型 查看Unet的源码&#xff0c;得知Unet的down,mid,up blocks的类型分别是&#xff1a; down_block_types: Tuple[str] ("CrossAttnDownBlock2D","CrossAttnDownBlock2D","CrossAttnDownBlock2D","DownBlock2…...

编译以前项目更改在x64下面时报错:函数“PVOID GetCurrentFiber(void)”已有主体

win32下面编译成功&#xff0c;但是x64报错 1>GetWord.c 1>md5.c 这两个文件无法编译 1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\um\winnt.h(24125,1): error C2084: 函数“PVOID GetCurrentFiber(void)”已有主体 1>C:\Program Files (x…...

【AIGC】大模型面试高频考点-数据清洗篇

【AIGC】大模型面试高频考点-数据清洗篇 &#xff08;一&#xff09;常用文本清洗方法1.去除无用的符号2.去除表情符号3.文本只保留汉字4.中文繁体、简体转换5.删除 HTML 标签和特殊字符6.标记化7.小写8.停用词删除9.词干提取和词形还原10.处理缺失数据11.删除重复文本12.处理嘈…...

当测试时间与测试资源有限时,你会如何优化测试策略?

1.优先级排序&#xff1a;根据项目的需求和紧急程度进行优先级排序&#xff0c;将测试用例用例划分优先级&#xff0c;合理安排测试资源 和时间。这样能够保障在有限的时间内测试到最关键的功能 2.提前介入测试&#xff1a;在开发过程中提前进行测试&#xff0c;可以迅速发现问…...

代码筑梦者:数字世界的隐秘建筑师

代码筑梦者&#xff1a;程序员的隐秘世界在数字时代的星河里&#xff0c;有这样一群人——他们的指尖在键盘上飞舞&#xff0c;用0和1编织着世界的另一重维度。程序员&#xff0c;这群现代社会的代码筑梦者&#xff0c;他们的工作早已超越了简单的“写代码”&#xff0c;而是成…...

Jimeng AI Studio参数详解:CFG强度对构图稳定性影响深度分析

Jimeng AI Studio参数详解&#xff1a;CFG强度对构图稳定性影响深度分析 1. 引言&#xff1a;为什么CFG强度如此重要&#xff1f; 当你使用Jimeng AI Studio生成图片时&#xff0c;可能会发现同样的提示词&#xff0c;调整CFG强度后生成的图片效果天差地别。有时候图片精美绝…...

如何用炉石传说脚本实现智能卡牌决策?2024最新配置指南

如何用炉石传说脚本实现智能卡牌决策&#xff1f;2024最新配置指南 【免费下载链接】Hearthstone-Script Hearthstone script&#xff08;炉石传说脚本&#xff09;&#xff08;2024.01.25停更至国服回归&#xff09; 项目地址: https://gitcode.com/gh_mirrors/he/Hearthsto…...

Windows下Python进程监控与自动化管理实践

1. Windows下Python进程管理入门指南 在Windows系统上运行Python脚本时&#xff0c;经常会遇到需要监控脚本运行状态、自动重启崩溃进程或者更新代码后重新加载的场景。比如你开发了一个爬虫程序需要724小时运行&#xff0c;或者部署了一个Web服务需要保证高可用性。手动操作不…...

亲子互动平台,2026java毕业设计项目

这是我们码上启航平台的一个新的原创项目【亲子互动平台】。项目是基于SpringBoot3vue3的前后端分离项目&#xff0c;可以用作毕业设计、实习项目、学习项目。 一、项目功能描述 本系统是一个综合性的亲子活动平台&#xff0c;主要面向两类用户&#xff1a;管理员和普通用户。…...

JDBC(MySQL)——DAY04(调用存储过程,存储函数)

今天针对JDBC中调用存储过程和存储函数进行了学习&#xff0c;学习内容如下&#xff1a;1.JDBC中调用存储过程&#xff1a;调用存储过程需要用到PreparedCall&#xff0c;专门用来处理调用存储过程和存储函数&#xff0c;迄今为止我学了三个Connection创建的陈述对象了&#xf…...

一文读懂OpenClaw!开源、可自托管的个人Agent平台

OpenClaw 是 2026 年备受关注的开源 AI Agent 平台&#xff0c;它并非普通的聊天 AI&#xff0c;而是 AI 智能 体理论的成熟工程化实践&#xff0c;不仅能聊天&#xff0c;更能帮你执行具体处理任务。想要用好这一工具&#xff0c;首先要厘清其底层的基础逻辑。 OpenClaw基础概…...

妥妥的豪华局 —— 让 AI 来做照片分析

虽然 AI 无法给出所有的准确分析。 尝试使用 AI 分析一张照片&#xff0c;照片上的不少细节 AI 都注意到了&#xff0c;尤其是对中美使用餐具的情况做了对比。 同时&#xff0c;口味判断是准确的。 同时&#xff0c;给出的照片中&#xff0c;删除了所有的 EXIF 信息&#xff…...

pdfmake终极指南:10分钟掌握JavaScript PDF生成神器

pdfmake终极指南&#xff1a;10分钟掌握JavaScript PDF生成神器 【免费下载链接】pdfmake Client/server side PDF printing in pure JavaScript 项目地址: https://gitcode.com/gh_mirrors/pd/pdfmake pdfmake是一款强大的纯JavaScript PDF生成库&#xff0c;支持客户端…...

连续时间马尔科夫链:从理论到生灭过程的应用解析

1. 从排队到种群&#xff1a;为什么我们需要连续时间马尔科夫链&#xff1f; 想象一下&#xff0c;你正在一家网红奶茶店排队。队伍的长度时增时减&#xff0c;有人买完离开&#xff08;“死亡”&#xff09;&#xff0c;也有新顾客加入队尾&#xff08;“出生”&#xff09;。…...