我的目標是使用遞回連接兩個字串。
輸入將是 str1 = ("long string") str2 = ("yes so long")
輸出將是:'lyoensg ssto rlionngg'
假設兩個字串的長度相同。
我現在的代碼是:
def concat_order(str1, str2):
if len(str1) == 0:
return 'complete'
i = 0
new_str = str1[i] str2[i]
i = i 1
return concat_order(str1[1:], str2[1:])
return new_str
print(concat_order("long string"', "yes so long"))
我確定我離得很近,但我正在努力讓它回圈。
我不允許使用回圈,但我可以使用 if 陳述句
uj5u.com熱心網友回復:
您不需要像這樣傳遞 'i' :new_str = str1[i] str2[i]
因為您已經回傳字串,不包括前一個字符:return concat_order(str1[1:], str2[1:])。
一個函式也不能有兩個這樣的回傳陳述句:
return concat_order(str1[1:], str2[1:])
return new_str
return 陳述句之后的任何陳述句都不會執行。這就是為什么我們在一些條件陳述句中撰寫多個回傳陳述句,例如if else
修改您的程式以給出正確答案。
def concat_order(str1, str2, new_str):
if len(str1) == 0:
return new_str
new_str = str1[0] str2[0]
return concat_order(str1[1:], str2[1:], new_str)
ans = ""
print(concat_order("long string", "yes so long", ans))
或者你可以這樣做:
def concat_order(str1, str2):
if len(str1) == 0:
return ''
return str1[0] str2[0] concat_order(str1[1:], str2[1:])
print(concat_order("long string", "yes so long"))
當控制流到達基本情況時,我們已經有了我們想要的,所以不要回傳任何東西。
uj5u.com熱心網友回復:
遞回只需要一個基本案例和一個遞回案例。這里你的基本情況有點奇怪。你永遠不需要字串"complete",所以你不應該回傳它。基本情況何時str1為空應該只回傳空字串。
然后你只需要從每個字串中取出第一個字母,concat 和 concat 并遞回其余的:
def concat_order(str1, str2):
if len(str1) == 0:
return ''
a, b = str1[0], str2[0]
return a b concat_order(str1[1:], str2[1:])
concat_order("long string", "yes so long")
# 'lyoensg ssot rlionngg'
請注意,額外的空間是正確的行為,除非需要阻止它們。
uj5u.com熱心網友回復:
def concat_strings_rec(str1, str2):
if len(str1) < 1:
return ""
else:
curStr = str1[0] str2[0]
return curStr concat_strings_rec(str1[1:], str2[1:])
def concat_string_iter(str1, str2):
return "".join([str1[i] str2[i] for i in range(len(str1))])
string1 = "long string"
string2 = "yes so long"
print(concat_strings_rec(string1, string2))
print(concat_string_iter(string1, string2))
預期輸出:
lyoensg ssot rlionngg
lyoensg ssot rlionngg
遞回解決方案
您需要陣列長度為 0 的基本情況。在這種情況下,回傳一個空字串。在所有其他情況下,回傳每個字串的第一個元素,并與遞回呼叫的回傳值連接起來concat_strings_rec()。請記住減少遞回呼叫的陣列大小!
迭代解決方案
迭代解決方案只是遍歷連接兩個字串中每個字符的陣列,并將連接的第一個、第二個、第三個...字符放入陣列中。然后使用"".join()將陣列中的這兩個字串連接成一個完整的字串。
推薦
不要使用遞回解決方案,因為它只是由于呼叫堆疊而消耗更多記憶體并且速度會更慢,而且由于 Python 對呼叫堆疊上的呼叫次數有限制,因此對于較大的字串它將失敗。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/460409.html
下一篇:條件被忽略?
