关于面试总结-python笔试题(递归)

时间:2023-03-09 18:30:24
关于面试总结-python笔试题(递归)

前言

本篇继续收集一些常见的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))