鱼C论坛

 找回密码
 立即注册
查看: 1983|回复: 4

不懂就问:关于斐波那契数列

[复制链接]
发表于 2023-6-20 20:40:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 lzb1001 于 2023-6-20 23:00 编辑

斐波那契数列不是从0开始吗?

下面是百度获得的内容:

斐波那契数列又称黄金分割数列,
它指的是0、1、1、2、3、5、8、13、21、34、……这样一个数列,
从这个数列也可以看出斐波那契数列的基本思想就是从第三项开始每一项都等于前两项的和。
在数学上,斐波那契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)。
图1: 图片1.png
根据上图,所以F(0)=0,F(1)=1,括号中的数字应该是下标


而小甲鱼教材或视频上说的是从1开始:
图2: 图片2.png
图3: 微信截图_20230620203804.png
根据图2和图3,所以F(1)=1,F(2)=1, 括号中的数字虽然是经过的月数,但实际对应的应该是图1里的项号,根据图1的对应关系,不是应该F(1)=0, F(2)=1吗?

或者是掐头也就是把0去掉,像下面这样好像就对了:

图4: 微信图片_20230620210616.png

我觉得斐波那契数列原意指的应该是索引或下标,为何在小甲鱼讲的python递归里变成了项号呢?

不知道大家是否明白我的困惑或不解?



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-21 20:20:41 | 显示全部楼层
先申明一下,本回答大部分来自gpt兄弟,有部分自己的内容,当然,如果能给你带来帮助,求求给个最佳答案

斐波那契数列的起始项在不同的定义中可能会有所不同,这也是导致你困惑的原因。事实上,斐波那契数列在不同的领域和应用中可能采用不同的起始值。

在数学上,斐波那契数列最常见的定义是从0和1开始,即F(0)=0,F(1)=1,然后每一项都等于前两项的和,即F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)。这种定义是最早被引入和广泛接受的。

然而,在一些计算机科学的应用中,特别是在编程语言中,人们有时会从第一个项开始计数,将第一个项标记为F(1)。这样做的原因是与编程语言中常用的从1开始的索引习惯相符合,这样更方便在代码中表示和处理斐波那契数列。这种定义通常被称为"偏移斐波那契数列"(Offset Fibonacci Sequence)。

小甲鱼教材或视频中的描述可能是基于这种偏移斐波那契数列的定义,即将F(0)省略,从F(1)开始。这并不是一个标准的数学定义,但在特定的编程环境中是常见的,目的是简化代码的实现。

所以,你的困惑源于对斐波那契数列的不同定义的理解。在数学上,通常使用F(0)=0,F(1)=1的定义,而在一些编程环境中,可能会使用F(1)=1,F(2)=1的定义。关键是要根据具体的上下文和应用来理解和使用斐波那契数列的定义。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-21 22:10:41 | 显示全部楼层
编程追风梦 发表于 2023-6-21 20:20
先申明一下,本回答大部分来自gpt兄弟,有部分自己的内容,当然,如果能给你带来帮助,求求给个最佳答案{:1 ...

感谢解答。

在数学上,斐波那契数列最常见的定义是从0和1开始,即F(0)=0,F(1)=1,然后每一项都等于前两项的和,即F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)。这种定义是最早被引入和广泛接受的。
---这里F(0)或F(1),括号中的数字应该指的是索引或下标

然而,在一些计算机科学的应用中,特别是在编程语言中,人们有时会从第一个项开始计数,将第一个项标记为F(1)。这样做的原因是与编程语言中常用的从1开始的索引习惯相符合,这样更方便在代码中表示和处理斐波那契数列。这种定义通常被称为"偏移斐波那契数列"(Offset Fibonacci Sequence)。
---这里没看懂,
(1)编程中不是以索引0作为第一个项,所以第一个项不是应该标记为F(0)才对?
(2)这样做的原因是与编程语言中常用的从1开始的索引习惯相符合?小甲鱼一开始上课不是说编程语言的索引是从0开始,所以他布置的课后作业的第1题的序号也是0吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-22 08:34:05 | 显示全部楼层
(1)索引从0开始。这意味着第一个元素在数组、列表或其他数据结构中的索引为0,而不是1。

例如,如果你有一个包含5个元素的数组,它们的索引将从0到4,而不是从1到5。因此,第一个元素可以通过索引0来访问,而不是1。

这种以0为起始索引的约定在计算机科学中是非常常见的,特别是在C、C++、Java、Python等流行的编程语言中。这种约定的历史原因很复杂,但它已经成为了一种广泛接受的惯例



(2)这种情况你可以去问问甲鱼哥,我让我朋友帮忙at一下 @高山 @zhangjinxuan @liuhongrun @学习编程中的Ben
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-22 09:08:30 | 显示全部楼层
0 可以省略,至于为什么递归变成项号,那是因为我们求 F(n) 就是要把 F(n) 拆成 F(n - 1) + F(n - 2),你想一想递归是在干什么,就知道斐波那契数列的原理了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 20:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表