首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

斐波那契数列与杨辉三角

斐波那契数列的定义为:其第n个数是其第n-2个数与其第n-1个数的和。一般的斐波那契数列以0为第0个数,1为第1个数,则数列可表示为:0, 1, 1, 2, 3, 5, 8, 13......

杨辉三角则如下图所示:

可以发现其第n行有n个数字,且第一个和最后一个为1,其余的n-2个数字是上一行(n-1行)相邻数字之和。

总结发现,这两个代数集合都有如下的特性:

第一,元素个数为无穷,那么在python中就不能存储为list。

第二,有循环特性,但与递归不同。

对于此类问题,在python中,可以用generator(生成器)来解决。

斐波那契数列代码如下:

deffib():

a,b =,1

while True:

yielda

a,b = b,a + b

可以看到这个函数与普通函数的唯一区别就是:

yielda

并且这里面的:

while True:

似乎会导致无限的循环?

事实上generator是类惰性计算,它会执行至'yield'命令停下,然后再次调用时从上一次的'yield'开始所以我们可以这样调用fib函数

n =

fortinfib():

print(t)

n = n +1

ifn ==4:

break

并输出:

1

1

2

杨辉三角代码如下:

deftriangles():

L = [1]

while True:

yieldL

L.append()

L = [L[x-1] + L[x]forxinrange(len(L))]

这里面:

L.append()

指在L后增加一个元素0,而:

L = [L[x-1] + L[x]forxinrange(len(L))]

是一个列表生成式,里面包含了一个for in迭代。其中len(L)输出L的元素数目,range()输出一列自然数,但range(n)中不包含n。L[x-1] + L[x]即生成新列表的元素通项。类似斐波那契数列函数的调用输出:

[1]

[1, 1]

[1, 2, 1]

[1, 3, 3, 1]

[1, 4, 6, 4, 1]

[1, 5, 10, 10, 5, 1]

[1, 6, 15, 20, 15, 6, 1]

[1, 7, 21, 35, 35, 21, 7, 1]

[1, 8, 28, 56, 70, 56, 28, 8, 1]

[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]

(前10行杨辉三角

)

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180325G16NSY00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券