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]