fork download
  1. #アッカーマン関数を2通りで定義
  2. def acm_r(m,n):
  3. if m == 0:
  4. return n + 1
  5. if n == 0:
  6. return acm_r(m - 1, 1)
  7. return acm_r(m - 1, acm_r(m, n - 1))
  8.  
  9. def acm_non_r(m,n):
  10. stk = [(m, n)]
  11. while(len(stk)):
  12. m,n = stk.pop()
  13. if m is None and n is not None:
  14. if len(stk):
  15. m,_ = stk.pop()
  16. stk.append((m, n))
  17. else:
  18. break
  19. else:
  20. if m == 0:
  21. stk.append((None, n+1))
  22. elif n == 0:
  23. stk.append((m-1, 1))
  24. else:
  25. stk.append((m-1, None))
  26. stk.append((m, n-1))
  27. return n
  28.  
  29. #acm(i,j) 0<=i<4, 0<=j<5 で検査
  30. print(all(acm_r(i,j) == acm_non_r(i,j) for i in range(4) for j in range(5)))
Success #stdin #stdout 0.08s 14076KB
stdin
Standard input is empty
stdout
True