递归计算对象在字符串中出现的次数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归计算对象在字符串中出现的次数相关的知识,希望对你有一定的参考价值。

所以我需要计算一个给定值出现在字符串中的次数,例如“hello world”,“o”,但是我的最大深度已经超过了......我不应该以递归方式执行此操作

def count(s, token) : #OUT OF RANGE

    if len(s) == 1 and s[0] == token :

        return 1 + count(s[1:], token)
        #return s[0]


    else :
        return count(s[1:],token)

在主要我有

print(count('hello world' , 'o'))
答案

ifelse都会导致另一个递归调用,这意味着函数无法停止调用自身。对于学习递归的程序员来说,这是一个非常常见的错误。

你的函数需要一些条件,它不会进一步调用自身,而只是返回一些值,以防止无限递归。也许如果字符串为空,则可以返回零。

正如其他人所说的那样,除了作为学习练习外,将其作为递归函数确实没有任何好处。一个简单的循环会更好,使用内置的字符串.count()函数更好。

另一答案

根据this回答你正在寻找str.count()没有必要让你自己的功能它已经内置!谢谢Python <3

print('hello world'.count('o'))
#2
另一答案

您需要在保持计数的同时循环显示字母。

def count(s, token) : #OUT OF RANGE

    count = 0
    for i in range(len(s)):
        if s[i] == token : count += 1

    return count

print(count('Hello, World' , 'o'))
另一答案

使用python的内置函数'count'

sentence = "Hello world!"
sentence.count('o')

这会给你结果。

另一答案

你的基本情况是不正确的,因为如果len(s) == 1 and s != token你将再次递归,但条件len(s) == 0你没有终止条件。

因此,无论什么时候len(s) <= 1你都需要终止。您还需要结合递归调用的结果。

固定版本可能如下所示:

def count(s, token):
    if len(s) <= 1:
        return 1 if s == token else 0
    return count(s[0], token) + count(s[1:], token)

print(count('hello world' , 'o')) # 2
另一答案

虽然许多答案都解决了代码中的缺陷,但我并不认为他们的示例解决方案符合您要实现的目标。你有大部分零件,但我会:选择单点回报;利用Python 3语法,因为你标记了这个[python-3.x];认为这是一个通用序列,而不是具体的字符串:

def count(sequence, token):
    token_count = 0

    if sequence:

        head, *tail = sequence

        if head == token:

            token_count += 1

        token_count += count(tail, token)

    return token_count

用法

>>> print(count('hello world', 'o'))
2
>>> print(count(['e', 'l', 'e', 'p', 'h', 'a', 'n', 't'], 'e'))
2
>>> 

以上是关于递归计算对象在字符串中出现的次数的主要内容,如果未能解决你的问题,请参考以下文章

递归计算嵌套数字列表中的出现次数

使用 sqlite 递归计算出现次数

web代码片段

统计句子中各个字符出现的次数

计算字符串c ++中出现的次数?

C语言 计算字符串中子串出现的次数 求更改