900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Python一行代码求解斐波那契数

Python一行代码求解斐波那契数

时间:2022-02-02 03:30:51

相关推荐

Python一行代码求解斐波那契数

1. 斐波那契数

斐波那契数是一系列数字,其中每个数字是前两个数字的总和。斐波那契数列中的第一个和第二个数都是1,后面的数是前两个数的和。

如下所示:

1 1 2 3 5 8 13 21 34 55

2. 问题抽象

我们需要完成的任务是编写一个函数fib,返回第n个fibonacci数,但必须在一行代码中完成。

一些测试用例:

fib(1) -> 1fib(2) -> 1fib(3) -> 2 (1+1)fib(4) -> 3 (2+1)fib(5) -> 5 (3+2)fib(6) -> 8 (5+3)fib(7) -> 13 (8+5)fib(8) -> 21 (13+8)fib(9) -> 34 (21+13)fib(10) -> 55 (34+21)

3. 递归实现

观察上述题目要求后,我们首先不考虑1行代码的约束,我们先来完成最容易想到的递归实现,代码如下:

def fib(n):if n <= 2:return 1return fib(n-1) + fib(n-2)

解释:

我们知道斐波那契数为前两个数的和,也就是说:

fib(6) = fib(5) + fib(4)fib(5) = fib(4) + fib(3)fib(4) = fib(3) + fib(2)

我们将其抽象化,归纳为:

fib(n) = fib(n-1) + fib(n-2)

同时我们观察到,斐波那契数列前两项即当n小于等于2时,值均为1,所以我们可以很方便的实现相应的递归操作。

4. 转化为一行代码

经过上面的解释,相信大家对递归实现有了清楚的认识,接下来我们来将其转换为我们需要的一行代码。

转换前:

def fib(n):if n <= 2:return 1return fib(n-1) + fib(n-2)

转换后:

def fib(n): return 1 if n<=2 else fib(n-1) + fib(n-2)

5. 扩展

如果我们需要的不是仅仅返回第n项斐波那契数呢,如果将其修改为返回一个列表,列表里存放的是斐波那契数列中的前n项呢?

当然我们可以对递归操作,做简单的修改,代码如下:

def fib(n):if n == 1:return [1]if n == 2:return [1,1]last = fib(n-1)return last + [last[-1] + last[-2]]

有了上述的实现,我们接着将其转化为一行代码实现,代码如下:

def fib(n):return [1] if n==1 else [1,1] if n==2 else fib(n-1) + [fib(n-1)[-1]+fib(n-2)[-1]]

6. 总结

需要明确的是,上述相关一行函数的实现往往执行起来并不是最有效的(实际上运行效率极低),但我们将其进行改成一行代码的实现,可以加深我们对python相关语法的深刻理解,提升自己的编码能力。

关注公众号《AI算法之道》,获取更多AI算法资讯。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。