我是一個初學者,試圖學習遞回并解決一些問題(嘗試子序列問題)。但在我什至可以嘗試使遞回邏輯正確之前,我在嘗試存盤回傳的值時被難住了。這是我嘗試過的和收到的輸出。嘗試放置一些列印命令只是為了理解。我認為以下內容會給我 answer = [[b,c],[c]] ,相反,存盤的值似乎是“無”。希望有人能解釋我做錯了什么以及如何糾正這個問題,以便我可以繼續處理子序列問題。謝謝你。
阿倫
def subseq(arr, answer=[""]):
if len(arr) == 0:
return("")
print("arr", arr)
answer = subseq(arr[1:],answer)
print("answer", answer)
arr = ['a','b','c']
subseq(arr)
#------------------------------------------------ ------------------
我希望得到 ['b','c'] 和 ['c'] 作為答案,但無法得到。輸出如下: arr ['a', 'b', 'c'] arr ['b', 'c'] arr ['c'] answer [''] #這后面跟著如下錯誤: answer = subseq(arr[1:],answer) #TypeError: 'NoneType' 物件不可迭代
uj5u.com熱心網友回復:
您的代碼也有其他錯誤。
將遞回視為:
- 你想在每個遞回步驟中做什么
- 在步驟 1 中進行操作后,您的輸入如何變得比以前小。
- 對步驟 2 中獲得的一小部分輸入進行遞回。
- 考慮遞回需要停止并將其放在頂部的基本情況。
因此,您需要通過以下方式修改您的代碼。請關注我的評論。
def subseq(arr, answer):
# Step 4: Base case
if len(arr) == 0:
return
print("arr ", arr)
# Step 1: Think about what you want to solve in each step
subsequence = arr[1:]
# collect your operation output in answer
if len(subsequence) > 0:
answer.append(subsequence)
# Step 2: New input
new_arr = arr[1:] # should become smaller at each step
# Step 3: Make more recursion
subseq(new_arr, answer)
arr = ['a','b','c']
answer = [] # Allocate memory for storing answer before hand
subseq(arr, answer)
print("answer", answer)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/475136.html
標籤:python-3.x 递归 子序列
