python中定义函数功能的重要作用:

将复杂的计算过程封装为一个函数存储起来,就可以避免写重复的代码。再次需要该计算的时候只需调用即可。

一,递归方法:

递归方法为:将问题一步步分解,直到得到可以解决的简单问题。

通常涉及直接或间接条用自身:

例如计算列表(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

斐波那契数列简介:

斐波那契数列是最常见的一道面试题,又称‘兔子数列/黄金分割数列’。

特性一:

任一个数都是前两个数之和。

例如:

因此第一种计算斐波那契数列的方法,即让数字序列的最后两个元素相加,得到新的数字并插入数列结尾。

特性二:

在极限条件下,相邻两个元素的商等于一个常数。即

第一种:

因此我们可以通过设置一个数组。

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]

两种方法运行时间对比:

输入【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)