本帖最后由 DingRan 于 2016-5-16 18:10 编辑
严重支持
首先,
用排列组合即可解决:
即:20个“向右”和20个“向下”共有几种排法?
C(40,20)=40!/20!/20!=137846528820
但毕竟是一道编程题~先占坑~
填坑~import time
d = {}#储存单步运算的结果,避免重复计算
#迭代函数
def f(x,y):
if (x,y) in d:
return d[(x,y)]
if x==0 and y!=0:
d[(x,y)] = f(x,y-1)
return f(x,y-1)
if x!=0 and y==0:
d[(x,y)] = f(x-1,y)
return f(x-1,y)
if x==0 and y==0:
d[(x,y)] = 1
return 1
if x!=0 and y!=0:
d[(x,y)] = f(x-1,y)+f(x,y-1)
return f(x-1,y)+f(x,y-1)
m = 20
a = time.clock()
print('结果:%s' %f(m,m))
b = time.clock()
print('用时:%.3fs'%(b-a))
运行结果:>>>
结果:137846528820
用时:0.010s
>>>
|