递推函数python 递推函数法( 二 )


if __name__ == "__main__":
x = input("请输入幂数")
x = int(x)
n = 1
sum = power(n, x)
print(sum)
n=1
sum = power2(n, x)
print(sum)
深入理解Python reduce函数 例如上面的例子,实现一个整形集合的累加 。假设lst = [1,2,3,4,5],实现累加的方式有很多:
第一种:用sum函数 。
sum(lst)
第二种:循环方式 。
def customer_sum(lst):
result = 0
for x in lst:
result+=x
return result
def customer_sum(lst):
result = 0
while lst:
temp = lst.pop(0)
result+=temp
return result
ifname ==" main ":
lst = [1,2,3,4,5]
print customer_sum(lst)
第三种:递推求和
def add(lst,result):
if lst:
temp = lst.pop(0)
temp+=result
return add(lst,temp)
else:
return result
ifname ==" main ":
lst = [1,2,3,4,5]
print add(lst,0)
第四种:reduce方式
lst = [1,2,3,4,5]
print reduce(lambda x,y:x+y,lst)
lst = [1,2,3,4,5]
print reduce(lambda x,y:x+y,lst,0)
def add(x,y):
return x+y
print reduce(add, lst)
def add(x,y):
【递推函数python 递推函数法】return x+y
print reduce(add, lst,0)
有一个序列集合,例如[1,1,2,3,2,3,3,5,6,7,7,6,5,5,5],统计这个集合所有键的重复个数,例如1出现了两次,2出现了两次等 。大致的思路就是用字典存储 , 元素就是字典的key,出现的次数就是字典的value 。方法依然很多
第一种:for循环判断
def statistics(lst):
dic = {}
for k in lst:
if not k in dic:
dic[k] = 1
else:
dic[k] +=1
return dic
lst = [1,1,2,3,2,3,3,5,6,7,7,6,5,5,5]
print(statistics(lst))
第二种:比较取巧的,先把列表用set方式去重,然后用列表的count方法
def statistics2(lst):
m = set(lst)
dic = {}
for x in m:
dic[x] = lst.count(x)
lst = [1,1,2,3,2,3,3,5,6,7,7,6,5,5,5]
print statistics2(lst)
第三种:用reduce方式
def statistics(dic,k):
if not k in dic:
dic[k] = 1
else:
dic[k] +=1
return dic
lst = [1,1,2,3,2,3,3,5,6,7,7,6,5,5,5]
print reduce(statistics,lst,{})
或者
d = {}
d.extend(lst)
print reduce(statistics,d)
通过上面的例子发现,凡是要对一个集合进行操作的,并且要有一个统计结果的,能够用循环或者递归方式解决的问题,一般情况下都可以用reduce方式实现 。
python中解 斐波那契数递推公式不能理解?第一张图
def f(n):
if n==1 or n==2:
return 1
else:
return f(n-1)+f(n-2)
b=f(6)
print(b)
源代码(注意源代码的缩进)
第一张图是斐波那契数列的递归程序,其过程是
f(6)=f(5)+f(4)=f(4)+f(3)+f(3)+f(2)=f(3)+f(2)+f(2)+f(1)+f(2)+f(1)+f(2)
=f(2)+f(1)+f(2)+f(2)+f(1)+f(2)+f(1)+f(2)
因为f(2)=f(1)=1所以上式=1+1+1+1+1+1+1+1=8
第二张图
def fact(n):
if n==0:
return 1
else:
return n*fact(n-1)
b=fact(5)
print(b)
源代码(注意源代码的缩进)
第二张图是阶乘的递归程序,其过程是
fact(5)=5*fact(4)=5*4*fact(3)=5*4*3*fact(2)=5*4*3*2*fact(1)=5*4*3*2*1*fact(0)
因为fact(0)=1,所以上式=5*4*3*2*1*1=120
详细解释,
因为n等于5所以执行else语句返回5*fact(4)
n等于4所以执行else语句返回4*fact(3)
n等于3所以执行else语句返回3*fact(2)
n等于2所以执行else语句返回2*fact(1)
n等于1所以执行else语句返回1*fact(0)
n等于0所以执行if语句返回1
然后反向回归
fact(1)=1*1
fact(2)=2*1*1
fact(3)=3*2*1*1

推荐阅读