我試圖編寫一個簡單的函數來遞歸地計算字符串的長度。Python的字符串長度遞歸
我可以做算術,斐波那契和階乘容易,但我想創建一個只有一個參數的最簡單的功能,我不喜歡第二個,就像一個計數器指數..
可以在任何爲我發佈一些小東西?
我試圖編寫一個簡單的函數來遞歸地計算字符串的長度。Python的字符串長度遞歸
我可以做算術,斐波那契和階乘容易,但我想創建一個只有一個參數的最簡單的功能,我不喜歡第二個,就像一個計數器指數..
可以在任何爲我發佈一些小東西?
這是你在找什麼?
def recursiveLength(theString):
if theString == '': return 0
return 1 + recursiveLength(theString[1:])
'is'測試身份不平等。它可以工作,但依賴於實現細節。 – unholysampler 2011-04-14 21:48:09
你說得對。我糾正了答案。 – Donovan 2011-04-14 21:50:37
如果它不必須是尾遞歸:
def strlen(s):
if s == '':
return 0
return 1 + strlen(s[1:])
這是非常低效的,但。
該做的:
def length(s):
return 0 if s == '' else 1 + length(s[:-1])
print length('hello world') # prints 11
功能哈斯克爾風格
>>> def RecListValue(list_value):
return type(list_value) in [list,str,tuple] and list_value and 1+RecListValue(list_value[1:]) or 0
>>> example_struct = [range(10), ("one",)*12, "simple string", 12]
>>> map(RecListValue, example_struct)
[10, 12, 13, 0]
>>>
我不認爲你可以只使用一個參數做到這一點,除非你在談論的全局變量。 – 2011-04-14 21:43:17
@Dean:當然可以。你只需要做*噸*的複製和非尾遞歸(不是尾遞歸會有幫助,它沒有被優化掉)。但是,再次,你不寫這樣的代碼,因爲一些現實世界的問題,但作爲一個練習。 – delnan 2011-04-14 21:45:06
當然你可以 - 你需要的只是字符串切片,返回值和加法。基本情況是空字符串的長度爲零。猶豫不定地說更多關於聞起來像作業的東西。 – bgporter 2011-04-14 21:47:44