以斐波那契数列实现黄金分割数的验证

几日前,在看明朝那些事儿的时候突然看到书中有提到黄金分割数,于是兴起百度了一下黄金分割数的具体概念,发现了黄金分割数与斐波那契数列之间不可言喻的联系。

 

黄金分割数相信大家都听说过但是很少去刻意了解。我先给大家解释一下黄金分割数的定义:把一条线段分割为两个部分,使其中一部分与全长之比等于另一部分与这部分之比。其比值是一个无理数,取其前三位数字的近似值是0.618.

斐波那契数列定义:斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1,1,2,3,5,8,13......这个数列从第3项开始,每一项都等于前两项之和。

研究发现,相邻两个斐波那契的比值是随序号的增加而逐渐趋于黄金分割比的。即f(n)/f(n-1)-->1.618  f(n)/f(n+1)-->0.618...由于斐波那契都是整数,两个整数相除的结果是有理数,所以只是逐渐逼近黄金分割比这个无理数。但是当我们继续计算出后面更大的斐波那契数时,就会发现相邻两数之比确实是非常接近黄金分割比的。

接下来我们就用python来实现黄金分割比的验证:

 

fib = [1]          # 定义列表, 存放斐波那契数列
a, b = 1, 1
for i in range(50):     
    fib.append(b)
    a, b = b, a + b
print(fib)
for i in range(50):
    c = fib[i] / fib[i + 1]
    print(c)

这样就可以看到当循环到后面时,c就近似等于0.618了。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 好的,我可以帮您实现Fibonacci列前40个。以下是实现代码: ```python def fibonacci_sequence(n): if n == 0: return [] elif n == 1: return [0] elif n == 2: return [0, 1] else: result = [0, 1] for i in range(2, n): result.append(result[i - 1] + result[i - 2]) return result ``` 您可以调用该函并传入参40,就可以得到Fibonacci列前40个。请注意,这个函实现的是Fibonacci列的迭代解法,而不是递归解法,所以可以快速地计算出较大的列。 ### 回答2: 斐波那契数列是指从0和1开始,后续的都是前两个之和的列。根据这个定义,我们可以递归地计算斐波那契数列,也可以使用循环的方式来实现。 要实现斐波那契数列的前40个,我们可以先定义一个组,长度为40,用来存储列的每一项。然后,我们将列的前两个0和1存入组中。 接下来,我们使用一个循环从第三个开始,依次计算每一项。根据定义,第n项等于前两项的和,我们可以用组中的第n-1项和第n-2项的和来计算当前项,并将计算结果存入组中。 循环直到计算完前40个为止,最后我们就得到了斐波那契数列的前40个。下面是具体的代码实现: ``` // 定义一个长度为40的组,用来存储斐波那契数列的前40个 int fib[40]; fib[0] = 0; // 列的第一项为0 fib[1] = 1; // 列的第二项为1 // 使用循环计算列的后续项 for (int i = 2; i < 40; i++) { fib[i] = fib[i-1] + fib[i-2]; // 当前项等于前两项之和 } // 输出列的前40个 for (int i = 0; i < 40; i++) { cout << fib[i] << " "; } ``` 通过上述代码实现,我们可以得到斐波那契数列的前40个,分别为:0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 102334155 165580141。 ### 回答3: 要实现fibonacci列的前40个,可以使用迭代或递归的方法。 方法一:使用迭代法 使用迭代法来计算fibonacci列的前40个,需要定义两个变量来保存当前和前一个。 初始值为0和1,然后通过循环计算下一个,直到计算到第40个。 ```python def fibonacci(n): a, b = 0, 1 # 初始化变量a和b fibo_seq = [a, b] # 保存fibonacci列 for i in range(2, n): # 从第2个开始计算 a, b = b, a + b fibo_seq.append(b) return fibo_seq fibo_nums = fibonacci(40) print(fibo_nums) ``` 方法二:使用递归法 使用递归法来计算fibonacci列的前40个,需要定义一个递归函来计算每个。 递归函的结束条件是列索引小于等于1,此时返回列当前;否则,返回前两个的和。 ```python def fibonacci(n): if n <= 1: # 结束条件 return n else: return fibonacci(n - 1) + fibonacci(n - 2) fibo_seq = [fibonacci(i) for i in range(40)] # 通过循环调用递归函来计算fibonacci列 print(fibo_seq) ``` 以上两种方法都可以获得fibonacci列的前40个

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Noah Ren

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值