Python字符串长度递归

5

我正在尝试编写一个简单的递归函数来计算字符串长度,但是我感到困惑。

我可以轻松地做加法、斐波那契数列和阶乘,但我正在尝试创建只有一个参数的最简单函数,我不喜欢另外再添加一个计数器索引。

有人能为我提供一个简短的函数吗?


我认为你不能只使用一个参数来完成它,除非你在谈论全局变量。 - Dean Barnes
3
@Dean:当然可以。你只需要大量复制和非尾递归(不是说尾递归会有帮助,因为它并没有被优化掉)。但是再次强调,你编写这种代码并不是因为某个现实世界的问题,而是作为一种练习。 - user395760
当然可以 - 你所需要的只是字符串切片、返回值和加法。基本情况是空字符串的长度为零。对于像作业一样的东西,我不太愿意多说。 - bgporter
我一发布这个问题,就想到可以像Alberteddu的回答那样做。 - Dean Barnes
不是作业,这可能是一些入门课程哈。谢谢Alberteddu! - John Redyns
4个回答

15

这是你要找的内容吗?

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

2
is测试的是身份而不是相等性。它可以工作,但依赖于实现细节。 - unholysampler

4
这就完成了:
def length(s):
    return 0 if s == '' else 1 + length(s[:-1])

print length('hello world') # prints 11

1

函数式Haskell风格

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

0

如果不需要尾递归:

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

虽然这样做效率相对较低。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接