前言
本篇继续收集一些常见的python笔试题,以基础知识为主,递归是面试最喜欢考的一个问题,不管是做开发还是测试,都无法避免考递归。本篇结合实际案例,讲下几种关于递归的场景。
计算n的阶乘
计算n!,例如n=3(计算321=6), 求10!
方法1:可以用python里面的reduce函数,reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
from functools import reduce
# 方法1:推荐!
a = 10
b = reduce(lambda x, y: x*y, range(1, a+1))
print(b)
如果不想用lamdba函数,可以定义一个函数
from functools import reduce
def chengfa(x, y):
return x*y
a = 10
b = reduce(chengfa, range(1, a+1))
print(b)
方法2:自己写个递归函数
def digui(n):
if n == 1:
return 1
else:
return n*digui(n-1)
a = 10
print(digui(a))
方法3:用for循环(不推荐!)
a = 10
s = 1
for i in range(1, a+1):
s = s*i
print(s)
斐波那契数列
已知一个数列:1、1、2、3、5、8、13、。。。。的规律为从3开始的每一项都等于其前两项的和,这是斐波那契数列。求满足规律的100以内的所以数据
a = 0
b = 1
while b < 100:
print(b,",")
a, b = b, a+b
def factorial(n): if n<1: return -1 if n==1 or n==2: return 1 else: return factorial(n-1)+factorial(n-2)
幂的递归
计算x的n次方,如:3的4次方 为3*3*3*3=81 ,可直接使用内置函数pow(3,4)
def f(x,n): A=isinstance(x,(int,float)) #这是考虑x和n的类型,需要满足条件才可以往下执行 if A!=True: return None B=isinstance(n,(int,float)) if B!=True: return None if x==0: return None s=1 #设置s的初始值 while n>0:#下面讨论的是n的三种情况 n=n-1 s=s*x #因为初始值s就等于1,所以可以这样写 if n==0: return s else: L=abs(n) while L>0: L=L-1 s=s*x return 1/s #因为当n为负数的时候,需要先求平方,然后再用1来除以这个数 print(f('J',3))