알고리즘 구현시 약간의 오류가있었습니다. 재귀 적 접근법을 사용한다면 grid
을 사용할 필요가 없습니다. 실제로 저장된 데이터가 필요하기 때문입니다. 현재 위치에서 가능한 두 가지 하위 경로 만 반환하면됩니다. 바로 그 것입니다! 따라서 코드의 주요 개념을 일부 변경해야합니다. 매개 변수 width
및 height
정점의 수를 나타냅니다, 따라서 것을,
def pathCounterNaive(width, height, startX = 0, startY = 0):
if startX >= width or startY >= height:
return 0
if startX == width-1 and startY == height-1:
return 1
return pathCounter(width,height, startX+1, startY) + pathCounter(width,height, startX, startY+1)
slowK=pathCounterNaive(3,3)
print(slowK)
명심하십시오 :
나는이 작업을 가능한 한 원래의 코드의 정도를 유지하지만, 여전히 만들려고 이 아니라
2x2
그리드의 경우
3
입니다. 이 코드는 순수 재귀를 사용하므로 매우 느립니다.당신이 당신의 암기 방법을 사용하려면 다음과 같이 코드를 수정해야합니다 :
import numpy as np
def pathCounter(width, height):
grid = np.zeros((height+1, width+1))
def pathCounterInternal(x, y):
if x==0 or y==0:
return 1
grid[x, y] = pathCounterInternal(x,y-1)+pathCounterInternal(x-1,y)
return grid[x, y]
grid[width, height] = pathCounterInternal(width, height)
return grid[width, height]
k=pathCounter(2,2)
print(k)
을 다음은 2x2
그리드에 대한 매개 변수로 2
로 전화를해야합니다. 이 코드는 이미 계산 된 경로의 캐싱으로 인해 훨씬 빠릅니다.
구체적인 문제는 무엇입니까? – FlashTek
https://projecteuler.net/archives –
15 번째 질문입니다. 파이썬에서만 재귀를 해결하고 파이썬에서 재귀와 다른 개념을 배울 필요가있다 –