안녕하세요. 이 예제는 매우 구체적이지만 광범위한 함수에 적용될 수 있다고 생각합니다. 온라인 프로그래밍 콘테스트에서 가져온 것입니다.이 방법을 비 재귀 적으로 만드는 방법은 무엇입니까?
간단한 승리 조건의 게임이 있습니다. 끌기는 불가능합니다. 모든 움직임이 종결 상태에 더 가깝기 때문에 게임을 영원히 계속할 수 없습니다. 이 함수는 주어진 상태에서 현재 이동해야하는 플레이어가 승리 전략을 가지고 있는지 결정해야합니다. 예에서 상태는 정수입니다. 플레이어는 0이 아닌 숫자를 선택하고 숫자에서 숫자를 뺍니다. 새 상태가 새로운 정수입니다. 승자는 0에 도달 한 플레이어입니다. 나는 그것이 어떻게 작동하는지는 분명 생각
from Memoize import Memoize
@Memoize
def Game(x):
if x == 0: return True
for digit in str(x):
if digit != '0' and not Game(x-int(digit)):
return True
return False
:
내가이 코딩. 나는 또한이 특정 게임을 위해 아마도 훨씬 똑똑한 해결책이 있다는 것을 알고 있지만 나의 질문은 일반적이다. 그러나 이것은 상대적으로 작은 입력에 대해서조차도 파이썬을 미쳤습니다. 이 코드가 루프에서 작동하도록하는 방법이 있습니까?감사
이 내가 루프로 번역 무엇을 의미하는 것입니다 : "미쳐"으로
def fac(x):
if x <= 1: return x
else: return x*fac(x-1)
def fac_loop(x):
result = 1
for i in xrange(1,x+1):
result *= i
return result
## dont try: fac(10000)
print fac_loop(10000) % 100 ## works
시작 숫자 10 진수가 0이 아닌 경우에만 시작 플레이어가 승리 전략을 얻습니다. 이 경우이 숫자를 선택하고 상대방에게 소수점 이하 숫자가 0 인 피드를 보냅니다. 결국 10으로 미끄러지며, 상대방은 9가되고, 9를 빼면 승리합니다. 10 배로 시작할 경우, 상대방은 대칭적인 승리 전략을가집니다. – tomash