python基础 -- Fibonacci数列的n种方法 和 其他基础

1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)

1 生成共n项的 Fibonacci数列:
def Generate(i, n, arr):
    arr.append(arr[i-1]+ arr[i-2])
    if(i == n ):
        return(arr)
    Generate( i+1 , n , arr)
    return (arr)

def Fibonacci1(n):
    if n == 0:
        arr = [1]
        return  arr[0]
    elif n == 1:
        arr = [1,1]
        return arr[1]
    else:
        arr = [1,1]
        return Generate(2, n , arr)

if __name__ =='__main__':
    arr = Fibonacci1(10)
    print(arr)

output:
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

求出第n项的n项的 Fibonacci数列值:

a. 一般递归

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

可以简化为:

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

b. 尾递归

def Fibonacci(n):
    def fib_iterator(n,x,y):
        if n == 0:
            return x
        else:
            return fib_iterator(n-1, y, x+y)
    return fib_iterator(n, 0 ,1)

尾递归可以简化为:

def Fibonacci(n):
    fib = lambda n, x=0, y=1: x if not n else fib(n - 1, y, x + y)
    return fib(n)

c. 迭代

def Fibonacci(n):
    x,y = 0, 1
    while(n):
        x,y,n = y ,x+y , n-1
        return x

d. 迭代器(yield)

def fib_yield():
    a , b = 0 ,1
    while True:
        yield b
        a , b = b, a+b

g = fib_yield()
print(next(g))
print(next(g))
print(next(g))
print(next(g))

output:
1 1 2 3

不得不说,斐波那契数列的下面这篇博文也很有意思,可以参考
https://blog.csdn.net/ncafei/article/details/54176276

2.python 没有do…while 结构:

因为python 秉持着能用一种结构完成,就不用多余的结构
下面的代码可以完成相同的功能:

while True:
     do_something()
     if condition():
        break
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值