题目:斐波那契数列。

程序分析:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。

在数学上,费波那契数列是以递归的方法来定义:

F0 = 0     (n=0)
F1 = 1    (n=1)
Fn = F[n-1]+ F[n-2](n=>2)

代码:

#!/usr/bin/python

#定义斐波那契数列
def fib(n):
    a,b = 0,1
    for i in range(n-1):
        a,b = b,a+b
    return a
# 输出了第10个斐波那契数列
print (fib(10))

运用递归:

#!/usr/bin/python
 
# 使用递归
def fib(n):
    if n==1:
        return 0
    if n==2 or n==3:
        return 1
    return fib(n-1)+fib(n-2)
# 输出了第10个斐波那契数列
print (fib(10))

输出指定个数的斐波那契数列:

#!/usr/bin/python
 
def fib(n):
#前两项的值单独定义
    if n == 1:
        return [1]
    if n == 2:
        return [1, 1]
#大于三项的情况,先创建一个含有前两项的列表
    fibs = [1, 1]
    for i in range(2, n):
        fibs.append(fibs[-1] + fibs[-2])
    return fibs
 
# 输出前 10 个斐波那契数列
print (fib(10))

输出结果:

输入个数:10
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

但是上述代码未考虑到输入个数为负数的情况,输入为负数仍然可以输出。

所以,下面是完善的代码

#!/usr/bin/python

def fib(n):
    if n <= 0:
        print('请输入一个正数。')
#前两项的值单独定义
    if n == 1:
        return [0]
    if n == 2:
        return [0, 1]
#大于三项的情况,先创建一个含有前两项的列表
    if n > 2 :
        fibs = [0, 1]
        for i in range(2, n):
            fibs.append(fibs[-1] + fibs[-2])
        return fibs 
# 输出前 n 个斐波那契数列
n = int(input('输入个数:'))
print (fib(n))

输出结果:

输入个数:-3
请输入一个正数。
None
输入个数:10
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐