大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
文章目录
/ 一,递归方法: /
递归方法为:将问题一步步分解,直到得到可以解决的简单问题。
通常涉及直接或间接条用自身:
例如计算列表(1,3,5,7,9,13)中各元素的和。
“>
直接或间接调用 sum()函数自身:
python 实现如下:
In[1]
def listsum(a):
if len(a) == 1:
return a[0] #如果列表中只有一位元素,则返回a[0]
else:
return a[0] + listsum(a[1:]) #返回第一位元素于剩余其他元素的和
print(listsum([1,3,5,7,9,13]))
Out[2]:
38
`
/ 二,斐波那契数列简介: /
斐波那契数列是最常见的一道面试题,又称‘兔子数列/黄金分割数列’。
1
特性一:
任一个数都是前两个数之和。
例如:
因此第一种计算斐波那契数列的方法,即让数字序列的最后两个元素相加,得到新的数字并插入数列结尾。
斐波那契矩陣式解法:
2
特性二:
在极限条件下,相邻两个元素的商等于一个常数。即
3
第一种:
我们可以通过设置一个数组。
a = [0,1]
下一个要插入的数据就为“a【-1】+a【-2】”。
a.append(a[-1] + a[-2])
继续循环。循环 y 次就得到了 y 个新数字。
最后所得到的斐波那契数列中数字的个数为 n = y + 2 。
可以根据用户想要的斐波那契数字的个数 n 来定义循环次数 y。
y = n – 2
输入【1】:
def fibs1(n): #定义斐波那契函数
a = [0] #声明a为数组
if n <= 0:
print('错误') #n 不能 <= 0
else:
if n > 1:
a = [0,1]
for i in range(n - 2): #执行n-2次循环,即向数组a中新增n-2个斐波那契数字
a.append(a[-2] + a[-1]) #新增数字 = 最后两个数字的和
return a
输入【2】:
fibs1(10)
输出【2】:
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
第二种:
提前定义好数组中元素的个数,再依次设定每个值为前两个数的和。
输入【1】:
def fibs2(n): #n为需要的斐波那契数字个数
f = [0] * n #定义包含n个0的数组
if n <= 0:
print('错误') #n 不能 <= 0
else:
if n >= 2:
f[1] =1 #此时f = [0 , 1]
for i in range(2,n):
f[i] = f[i - 1] +f[i-2]
'''
f[2] = f[1] + f[0] = 1,此时f = [0,1,1];三个斐波那契数字
f[3] = f[2] + f[1] = 2,此时f = [0,1,1,2];四个斐波那契数字
......
f[n-1] = f[n-2] + f[n-1];n 个斐波那契数字
'''
return f
输入【2】:
fibs2(10)
输出【2】:
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
4
两种方法运行时间对比:
输入【1】:
%timeit fibs1(100)
%timeit fibs2(100)
输出【1】:
26.2 µs ± 736 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
30.7 µs ± 301 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
将复杂的计算过程封装为一个函数存储起来,就可以避免写重复的代码。再次需要该计算的时候只需调用即可。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/197870.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...