2011-04-14 127 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] 
     >>>