【问题标题】:Python string length recursionPython字符串长度递归
【发布时间】:2011-08-05 22:01:54
【问题描述】:

我正在尝试编写一个简单的函数来递归计算字符串长度。

我可以很容易地进行求和、斐波那契和阶乘,但我正在尝试用一个参数创建最简单的函数,我不喜欢将第二个参数用作计数器索引..

任何人都可以为我发布一些小东西吗?

【问题讨论】:

  • 我不认为你可以只使用一个参数来做到这一点,除非你在谈论全局变量。
  • @Dean:当然可以。你只需要做 tons 的复制和非尾递归(不是尾递归会有帮助,它没有被优化掉)。但话又说回来,你写这种代码不是因为一些现实世界的问题,而是作为一种练习。
  • 当然可以——您需要的只是字符串切片、返回值和加法。基本情况是空字符串的长度为零。不愿多说一些闻起来像家庭作业的事情。
  • 我一发布它就点击了,你可以像 Alberteddu 的回答那样做。
  • 不是作业。这将是一些介绍类哈。谢谢 Alberteddu!

标签: python string recursion string-length


【解决方案1】:

这是你要找的吗?

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

【讨论】:

  • is 测试身份不相等。它可以工作,但依赖于实现细节。
【解决方案2】:

这样做:

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

print length('hello world') # prints 11

【讨论】:

    【解决方案3】:

    函数式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]
           >>> 
    

    【讨论】:

      【解决方案4】:

      如果它不必是尾递归的:

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

      虽然效率很低。

      【讨论】:

        猜你喜欢
        • 2013-11-15
        • 1970-01-01
        • 2022-06-23
        • 1970-01-01
        • 2017-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-30
        相关资源
        最近更新 更多