您在執行算法時犯了一些錯誤。如果您使用遞歸方法,則不必使用grid
,因爲您實際上需要任何存儲的數據。您只需要從當前位置返回兩個可能的子路徑 - 就是這樣!因此,您需要對代碼的主要思想進行一些更改。
我試圖保持儘可能多的原密碼越好,但仍使其工作:
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)
請記住,這些參數width
和height
表示頂點的數量,並因此對於2x2
網格,不是2
,而是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)
在這裏,你有2
稱呼它爲一個2x2
電網參數。由於對已經計算的路徑進行緩存,此代碼速度更快。
你的具體問題是什麼? – FlashTek
https://projecteuler.net/archives –
第15個問題。我想只在Python中解決它,需要學習Python中的遞歸和其他概念 –