19.Ackermann Function
http://acm.fzu.edu.cn/problem.php?pid=1042
先编写递归函数,输入较小规模的数据观察输出结果,后利用规律编写函数直接获得结果。
# 编写递归函数,输入较小规模数据进行观察
def ackermann(m,n,dic):
if str([m,n]) in dic.keys():
return dic[str([m,n])]
if m==0:
result=n+1
dic[str([m,n])]=result
return result
elif m>0 and n==0:
result=ackermann(m-1,1,dic)
dic[str([m,n])]=result
return result
else:
result=ackermann(m-1,ackermann(m,n-1,dic),dic)
dic[str([m,n])]=result
return result
dic={}
for i in range(0,3):
for j in range(0,1001):
print(ackermann(i,j,dic),end=',')
print()
print('-'*55)
print()
for j in range(0,11):
print(ackermann(3,j,dic),end=',')
def ackermann_quick(m,n):
if m==0:
return n+1
elif m==1:
return n+2
elif m==2:
return 2*(n+1)+1
else:
if n==0:
return 5
else:
result=5
for i in range(0,n):
result=(result*2+3)
return result
import sys
for read_in in sys.stdin.readlines():
m,n=tuple([int(x) for x in read_in.rstrip().split(' ')])
print(ackermann_quick(m,n))