用代码实现斐波那契数列

F[0] = 1 ,F[1]= 1, F[N] =F[N-1]+F[N-2] 

返回一个数组,有时候想想这些数学真聪明,反正写几个数字相加,就成为经典,我怎么就没有想到呢?不多说,上代码,这些也是我看别人写的,然后自己再写一次,加深印象#代码手打的,可能正确率不高,纯粹为了肌肉记忆

一、递归法,就是自己无限的调用自己,直到有条件不满足后退出,

def A(n): #传参数

        if a<=0:

                return 0

        elseif a==1:

                return 1

        else: return A(n-1)+A(n-2)

A(N) 实际上返回是的第N的斐波那契数列的值,如果要打印出全部出来,需要使用一个list来显示

def B(n):

        re_list = [] #存放结果

        for i in range(1,n+1): # 为啥是n+1,是因为range是从0到n-1

                re_list.append(A(i))#把每个值设进去

        return re_list

num = int(input(‘自己喜欢的数:’))

调用打印print( B(num),end=‘ ’)

我们写代码的时候,这种方式其实是极其不推荐的,因为这个算法的时间维度为N^2,输入10的话,f(0)将会被计算1024次,数值越大,越无法想象。

 二、使用yield 方法,生成器,每次生成一个数,把这个数据拿出来就好,上代码

 def A(n):

        a,b=0,1 

        while n>0:

                yield b  #就是要拿这个

                a,b = b,a+b 替换

                n -=1#做人做事总是要有条件的吗,不能没有底线

===================我是底线====================

print(A(5)) ------->  <generator object A at 0x000001D72E55D8C0>  

#这是什么鬼,这个是生成器,需要使用list序列化出来 

print(list(A(5))) ----->[1, 1, 2, 3, 5]

其实还有循环法,但是如果面试要用,两个就够了,如果是让你写多个那就说不会。

好吧,这里再来一个算法是2N的例子,我觉得代码量最少的一个。只需要一个for循环搞定

def A(n):
    res = [1,1]
    if n>2:
        for i in range(n-2):
            res.append(res[-1]+res[-2])
    return res

这个代码看起来就舒服多了
A(10)  ------>[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

        

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值