python中斐波那契数列_斐波那契数列–在Python,JavaScript,C ++,Java和Swift中进行了解释...

2023-11-04

python中斐波那契数列

by Pau Pavón

通过保罗·帕文(PauPavón)

The Fibonacci sequence is, by definition, the integer sequence in which every number after the first two is the sum of the two preceding numbers. To simplify:

根据定义,斐波那契数列是整数序列,其中前两个后的每个数字都是前两个数之和。 为了简化:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …

0、1、1、2、3、5、8、13、21、34、55、89、144,...

It has many applications in mathematics and even trading (yes, you read that right: trading), but that’s not the point of this article. My goal today is to show you how you can compute any term of this series of numbers in five different programming languages using recursive functions.

它在数学甚至交易中都有许多应用(是的,您没看错:交易),但这不是本文的重点。 我今天的目标是向您展示如何使用递归函数以五种不同的编程语言计算该系列数字的任何项。

Recursive functions are those functions which, basically, call themselves.

递归函数是那些基本上会调用自己的函数。

I want to note that this isn’t the best method to do it — in fact, it could be considered the most basic method for this purpose. This is because the computing power required to calculate larger terms of the series is immense. The number of times the function is called causes a stack overflow in most languages.

我要指出,这不是最好的方法-实际上,可以将其视为实现此目的的最基本方法。 这是因为计算较大序列项所需的计算能力非常大。 在大多数语言中,调用函数的次数导致堆栈溢出。

All the same, for the purposes of this tutorial, let’s begin.

出于相同的目的,就本教程而言,我们开始吧。

First of all, let’s think about what the code is going to look like. It’ll include:

首先,让我们考虑一下代码的外观。 其中包括:

· A recursive function F (F for Fibonacci): to compute the value of the next term.

·递归函数F(斐波纳契数为F):计算下一项的值。

· Nothing else: I warned you it was quite basic.

·没有别的:我警告过你,这很基本。

Our function will take n as an input, which will refer to the nth term of the sequence that we want to be computed. So, F(4) should return the fourth term of the sequence.

我们的函数将以n作为输入,它将引用我们要计算的序列的第n个项。 因此,F(4)应该返回序列的第四项。

Let’s plan it. The code should, regardless the language, look something like this:

让我们计划一下。 无论使用哪种语言,代码都应如下所示:

function F(n)  if n = 0    return 0  if n = 1    return 1  else    return F(n-1) + F(n-2)

function F(n) if n = 0 return 0 if n = 1 return 1 else return F(n-1) + F(n-2)

Note: the term 0 of the sequence will be considered to be 0, so the first term will be 1; the second, 1; the third, 2; and so on. You get it.

注意:序列中的项0将被视为0,因此第一个项将是1; 第二个,1; 第三,2; 等等。 你懂了。

Let’s analyze the function for a moment. If it gets 0 as an input, it returns 0. If it gets 1, it returns 1. If it gets 2… Well, in that case it falls into the else statement, which will call the function again for terms 2–1 (1) and 2–2 (0). That will return 1 and 0, and the two results will be added, returning 1. Perfect.

让我们分析一下功能。 如果它的输入为0,则返回0。如果它为1,则返回1。如果它为2,那么……在这种情况下,它属于else语句,它将再次为函数2–1( 1)和2–2(0)。 那将返回1和0,并且将两个结果相加,返回1.完美。

Now you can see why recursive functions are a problem in some cases. Imagine you wanted the 100th term of the sequence. The function would call itself for the 99th and the 98th, which would themselves call the function again for the 98th and 97th, and 97th and 96th terms…and so on. It would be really slow.

现在您可以了解为什么在某些情况下递归函数会成为问题。 假设您想要序列的第100个术语。 该函数将自己调用第99位和第98位,而它们本身将再次调用该函数分别调用第98和97位,第97和96位……等等。 真的很慢。

But the good news is that it actually works!

但是好消息是它确实有效!

So let’s start with the different languages. I won’t give too much detail (actually, no detail at all) to make your reading experience better. There isn’t too much to detail anyways.

因此,让我们从不同的语言开始。 我不会提供太多细节(实际上根本没有任何细节),以使您的阅读体验更好。 无论如何,没有太多细节可言。

Let’s jump into it:

让我们跳进去:

Python (Python)

def F(n):  if n == 0:    return 0  if n == 1:    return 1  else:    return F(n-1) + F(n-2)

def F(n): if n == 0: return 0 if n == 1: return 1 else: return F(n-1) + F(n-2)

Swift (Swift)

func F(_ n: Int) -> Int {  if n == 0 {    return 0  }  if n == 1 {    return 1  }  else {    return F(n-1) + F(n-2)  }}

func F(_ n: Int) -> Int { if n == 0 { return 0 } if n == 1 { return 1 } else { return F(n-1) + F(n-2) }}

JavaScript (JavaScript)

function F(n) {  if(n == 0) {    return 0;  }  if(n == 1) {    return 1;  }  else {    return F(n-1) + F(n-2);  }}

function F(n) { if(n == 0) { return 0; } if(n == 1) { return 1; } else { return F(n-1) + F(n-2); }}

Java (Java)

public static int F(int n) {  if(n == 0) {    return 0;  }  if(n == 1) {    return 1;  }  else {    return F(n-1) + F(n-2);  }}

public static int F(int n) { if(n == 0) { return 0; } if(n == 1) { return 1; } else { return F(n-1) + F(n-2); }}

C ++ (C++)

int F(int n) {  if(n == 0) {    return 0;  }  if(n == 1) {    return 1;  }  else {    return F(n-1) + F(n-2);  }}

int F(int n) { if(n == 0) { return 0; } if(n == 1) { return 1; } else { return F(n-1) + F(n-2); }}

And that’s it. I chose these languages just based on popularity — or at least because these 5 are the most common ones that I use They’re in no particular order. They could be classified by syntax difficulty, in my opinion, from Python (easiest) to C++ (hardest). But that depends on your personal opinion and your experience with each language.

就是这样。 我只是根据流行程度选择了这些语言-或至少因为这5种语言是我使用的最常见语言,所以它们的排列顺序没有特定关系。 在我看来,可以按照语法难度对它们进行分类,从Python(最简单)到C ++(最困难)。 但这取决于您的个人意见和您对每种语言的经验。

I hope you liked this article and, if you have any questions/recommendations or just want to say hi, comment below!

我希望您喜欢这篇文章,如果您有任何疑问/建议,或者只是想打个招呼,请在下面评论!

翻译自: https://www.freecodecamp.org/news/the-fibonacci-sequence-in-5-different-programming-languages-1c6514c749e5/

python中斐波那契数列

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python中斐波那契数列_斐波那契数列–在Python,JavaScript,C ++,Java和Swift中进行了解释... 的相关文章

  • 检查 Android 手机上的方向

    如何查看Android手机是横屏还是竖屏 当前配置用于确定要检索的资源 可从资源中获取Configuration object getResources getConfiguration orientation 您可以通过查看其值来检查方向
  • 更改 Matplotlib 投影轴的背景颜色

    我正在尝试使用 Cartopy 创建一个图形 该图形需要在未投影的轴上绘制投影轴 这是一个尽可能简单的代码版本 它将轴上的内容替换为背景颜色 import matplotlib pyplot as plt import cartopy cr
  • 使用 if 语句的网格网格和用户定义函数的真值不明确

    假设我有一个函数f x y 足够光滑 然而 有些值仅在有限的意义上存在 以sin x x的价值x 0只存在于极限 x gt 0 中 在一般情况下 我用一个来处理这个问题if陈述 如果我在情节中使用它meshgrid我收到一条错误消息 Val
  • 尝试使用 Ruby Java Bridge (RJB) gem 时出现错误“无法创建 Java VM”

    我正在尝试实现 Ruby Java Bridge RJB gem 来与 JVM 通信 以便我可以运行 Open NLP gem 我在 Windows 8 上安装并运行了 Java 所有迹象 至少我所知道的 都表明 Java 已安装并可运行
  • 使用 AWS Java SDK 为现有 S3 对象设置 Expires 标头

    我正在更新 Amazon S3 存储桶中的现有对象以设置一些元数据 我想设置 HTTPExpires每个对象的标头以更好地处理 HTTP 1 0 客户端 我们正在使用AWS Java SDK http aws amazon com sdkf
  • org.jdesktop.application 包不存在

    几天以来我一直在构建一个 Java 桌面应用程序 一切都很顺利 但是今天 当我打开Netbeans并编译文件时 出现以下编译错误 Compiling 9 source files to C Documents and Settings Ad
  • Java中未绑定通配符泛型的用途和要点是什么?

    我不明白未绑定通配符泛型有什么用 具有上限的绑定通配符泛型 stuff for Object item stuff System out println item Since PrintStream println 可以处理所有引用类型 通
  • 使用 Flyway 和 Hibernate 的 hbm2ddl 在应用程序的生命周期中管理数据库模式

    我正在开发 Spring Hibernate MySql 应用程序 该应用程序尚未投入生产 我目前使用 Hibernatehbm2ddl该功能对于管理域上的更改非常方便 我也打算用Flyway用于数据库迁移 在未来的某个时候 该应用程序将首
  • 如何获取分类数据的分组条形图

    I have a big dataset with information about students And I have to build a graph of dependencies between different value
  • Keycloak - 自定义 SPI 未出现在列表中

    我为我的 keycloak 服务器制作了一个自定义 SPI 现在我必须在管理控制台上配置它 我将 SPI 添加为模块 并手动安装 因此我将其放在 module package name main 中 并包含 module xml 我还将其放
  • Android JNI C 简单追加函数

    我想制作一个简单的函数 返回两个字符串的值 基本上 java public native String getAppendedString String name c jstring Java com example hellojni He
  • Java - 不要用 bufferedwriter 覆盖

    我有一个程序可以将人员添加到数组列表中 我想做的是将这些人也添加到文本文件中 但程序会覆盖第一行 因此这些人会被删除 如何告诉编译器在下一个空闲行写入 import java io import java util import javax
  • Python 2.7 缩进错误[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题是由拼写错误或无法再重现的问题引起的 虽然类似的问题可能是on topic help on topic在这里 这个问题的解决方式不
  • Python:如何在不先创建整个列表的情况下计算列表的总和?

    通常我们必须 1 声明一个列表 2 使用以下方法计算该列表的总和sum 但现在我希望指定一个以 1 开头 间隔为 4 100 个元素的列表 如下所示 1 5 9 13 17 21 25 29 33 37 我不想涉及数学公式 所以 1 如何在
  • com.jcraft.jsch.JSchException:身份验证失败

    当我从本地磁盘上传文件到远程服务器时 出现这样的异常 com jcraft jsch JSchException Auth fail at org apache tools ant taskdefs optional ssh Scp exe
  • 使用 MPI 的 Allreduce 对 Python 对象求和

    我正在使用使用 Python 中的字典和计数器构建的稀疏张量数组操作 我想让并行使用这个数组操作成为可能 最重要的是 我最终在每个节点上都有计数器 我想使用 MPI Allreduce 或另一个不错的解决方案 将其添加在一起 例如 使用计数
  • 中断连接套接字

    我有一个 GUI 其中包含要连接的服务器列表 如果用户单击服务器 则会连接到该服务器 如果用户单击第二个服务器 它将断开第一个服务器的连接并连接到第二个服务器 每个新连接都在一个新线程中运行 以便程序可以执行其他任务 但是 如果用户在第一个
  • 如何同时接受int和float类型的输入?

    我正在制作一个货币转换器 如何让 python 同时接受整数和浮点数 我就是这样做的 def aud brl amount From to ER 0 42108 if amount int if From strip aud and to
  • 基于值的 matplotlib 条形图颜色

    有没有一种方法可以根据条形图的值对条形图的条形进行着色 例如 values below 0 5 red values between 0 5 to 0 green values between 0 to 08 blue etc 我找到了一些
  • javax.persistence.Table.indexes()[Ljavax/persistence/Index 中的 NoSuchMethodError

    我有一个 Play Framework 应用程序 并且我was使用 Hibernate 4 2 5 Final 通过 Maven 依赖项管理器检索 我决定升级到 Hibernate 4 3 0 Final 成功重新编译我的应用程序并运行它

随机推荐

  • Qt学习之二——QPushButton按钮用法

    目录 1 QPushButton按钮简介 2 三个构造函数 3 QPushButton常用属性 4 QPushButton常用方法 5 QPushButton按钮的信号与槽 1 QPushButton按钮简介 QPushButton是普通按
  • Vlc播放rtsp视频

    Vlc播放rtsp视频 网上的例子不少 我看后觉得有点不足的地方 就是他们没有设置播放rtsp视频时的参数 参数设置对播放网络视频是很重要的 如果设置不当 或不设置 可能你的程序就播放不了rtsp视频了 说下开发步骤吧 挺简单的 我的环境
  • 分布式消息队列RocketMQ&Kafka -- 消息的“顺序消费”-- 一个看似简单的复杂问题

    在说到消息中间件的时候 我们通常都会谈到一个特性 消息的顺序消费问题 这个问题看起来很简单 Producer发送消息1 2 3 Consumer按1 2 3 顺序消费 但实际情况却是 无论RocketMQ 还是Kafka 缺省都不保证消息的
  • 初学者怎样看懂代码_糖说:不懂代码的我们如何看代码?

    大家新年好啊 先给各位老板们拜个年 这两天写的大家不是很爱看 可能大家还是喜欢看一些故事性的东西 那么在以后的韭爷说里一定会加大对于故事板块儿的输出的 现在我们还是继续今天的内容吧 有始有终 不懂代码的我们如何看代码 这是一个问题 因为笔者
  • 【Android取证篇】华为设备无法识别解决方案

    Android取证篇 华为设备无法识别解决方案 以鸿蒙系统的开发者模式设置展示 和安卓的设置情况一样 suy 文章目录 Android取证篇 华为设备无法识别解决方案 华为设备无法识别 一 正常打开方式 1 开发者模式 2 USB配置 仅充
  • 最新ChatGPT网站AI系统源码+详细图文搭建教程/支持GPT4.0/AI绘画/H5端/Prompt知识库/

    一 前言 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统 本期针对源码系统整体测试下来非常完美 可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统 那么如何搭建部署AI创作ChatGPT
  • 2017-06-12 每日一记 Linux的root密码修改

    在ubuntu中 1 1 切换root用户 sudo su 然后输入sudo密码 su root 然后输入root密码 1 2 切换其他用户 su 用户名 修改root用户密码 需要记得sudo密码 首先sudo su 输入普通用户密码 进
  • 页面加载与iframe加载函数

  • 运算放大器基础知识

    文章目录 前言 一 运放内部电路原理 二 运放的参数和特性 1 输入输出特性曲线 2 主要参数 三 运放常用应用 1 加法器 2 减法器 3 读书电路和指数电路 4 乘法器和除法器 5 乘方和开平方根电路 6 积分电路 7 微分电路 8 P
  • Spring-Boot添加MyBatis:手动添加代码方式

    创建了一个MySQL数据库 并添加了一张表 添加MyBatis后 有两种使用方式 注解方式 简单快速 适合规模较小的数据库 xml配置方式 支持动态生成SQL 调整SQL更方便 适合大型数据库 无论哪种方式 都需要共同执行的前期工作 在po
  • Raspberry Pi运行Arduino Sketch

    在本文中 您将学习如何在Raspberry Pi上运行为Arduino编写的sketch 这将使我们能够将Arduino代码编译为可以在Raspberry Pi上运行的二进制文件 但是在我们这样做之前 我们必须在Arduino IDE和Ra
  • 剑指Offer第五十九题:按之字顺序打印二叉树

    题目描述 请实现一个函数按照之字形打印二叉树 即第一行按照从左到右的顺序打印 第二层按照从右至左的顺序打印 第三行按照从左到右的顺序打印 其他行以此类推 思路 1 第一种按照层序遍历 然后偶数行 默认从第一行开始 翻转即可 层序遍历和翻转可
  • iOS并发编程(一)-简介

    一个菜鸟的自我修养 就是在低级职位上不抓狂 当一个优秀的菜鸟 就是为了有一天不当菜鸟 瞅准机会迅速脱离菜鸟轨道 然后一路飞翔到世界的尽头 接下来系统的学习下并发编程 会有几篇吧 不多说 走起 简介 1 异步设计方式 传统并发编程模型是线程
  • 三分钟看懂Python分支循环规范:if elif for while

    人生苦短 我用python 分支与循环 条件是分支与循环中最为核心的点 解决的问题场景是不同的问题有不同的处理逻辑 当满足单个或者多个条件或者不满足条件进入分支和循环 这里也就说明这个对相同问题处理执行逻辑依据具体参数动态变化 由此产生多种
  • linux环境安装工具

    安装mysql http istester com article 258 html 安装git https wx zsxq com dweb2 index group 88512425825412 from mweb type detai
  • java批量生成二维码图片,并打包成ZIP

    最近开发遇到了一个批量打印二维码并生成zip包的需求 先记录下来 pom依赖
  • MySQL(免安装版)的安装与配置详细教程及相关问题解决办法、开启远程连接

    免安装版的Mysql MySQL关是一种关系数据库管理系统 所使用的 SQL 语言是用于访问数据库的最常用的标准化语言 其特点为体积小 速度快 总体拥有成本低 尤其是开放源码这一特点 在 Web应用方面 MySQL 是最好RDBMS Rel
  • 小程序设计规范(一)

    小程序设计规范 标签 相比APP而言 开发一款小程序的开发成本更低 周期更短 同时开发难度和维护成本也相对降低 因此越来越多的开发者开始入坑小程序 正好最近我也要开发小程序 所以今天我就从设计方面聊一聊微信小程序设计规范 埋上设计中可能会出
  • CTP:报单错误:不允许重复报单(原因及解决方案)

    CTP 报单错误 不允许重复报单 原因及解决方案 使用QT5 10 上期的CTP平台开发了一整套程序化交易系统 开发的过程中遇到了各种各样的问题 其中关于CTP接口的开发就遇到了很多坑 甚至很多坑是经过了一段时间的实盘测试才能被发现 本文所
  • python中斐波那契数列_斐波那契数列–在Python,JavaScript,C ++,Java和Swift中进行了解释...

    python中斐波那契数列 by Pau Pav n 通过保罗 帕文 PauPav n The Fibonacci sequence is by definition the integer sequence in which every