2011-04-14 128 views
1

我試圖編寫一個簡單的函數來遞歸地計算字符串的長度。Python的字符串長度遞歸

我可以做算術,斐波那契和階乘容易,但我想創建一個只有一個參數的最簡單的功能,我不喜歡第二個,就像一個計數器指數..

可以在任何爲我發佈一些小東西?

+0

我不認爲你可以只使用一個參數做到這一點,除非你在談論的全局變量。 – 2011-04-14 21:43:17

+3

@Dean:當然可以。你只需要做*噸*的複製和非尾遞歸(不是尾遞歸會有幫助,它沒有被優化掉)。但是,再次,你不寫這樣的代碼,因爲一些現實世界的問題,但作爲一個練習。 – delnan 2011-04-14 21:45:06

+0

當然你可以 - 你需要的只是字符串切片,返回值和加法。基本情況是空字符串的長度爲零。猶豫不定地說更多關於聞起來像作業的東西。 – bgporter 2011-04-14 21:47:44

回答

7

這是你在找什麼?

def recursiveLength(theString): 
    if theString == '': return 0 
    return 1 + recursiveLength(theString[1:]) 
+2

'is'測試身份不平等。它可以工作,但依賴於實現細節。 – unholysampler 2011-04-14 21:48:09

+0

你說得對。我糾正了答案。 – Donovan 2011-04-14 21:50:37

0

如果它不必須是尾遞歸:

def strlen(s): 
    if s == '': 
    return 0 
    return 1 + strlen(s[1:]) 

這是非常低效的,但。

2

該做的:

def length(s): 
    return 0 if s == '' else 1 + length(s[:-1]) 

print length('hello world') # prints 11 
0

功能哈斯克爾風格

 >>> 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] 
     >>>