Python 编写递归函数

Python 编写递归函数,python,recursion,Python,Recursion,我试图用Python编写一个递归函数来计算字符串中重复字符对的数量。示例:“hellmoo”=2 为了让我开始,我首先尝试编写一个迭代版本的程序。以下是我的尝试: counter = 0 string = input("Enter string:" ) for i in range(len(string)-1): if string[i] == string[i+1]: counter = counter+1 print (counter) 现在,我不明白如何从上

我试图用Python编写一个递归函数来计算字符串中重复字符对的数量。示例:“hellmoo”=2 为了让我开始,我首先尝试编写一个迭代版本的程序。以下是我的尝试:

counter = 0
string = input("Enter string:" )

for i in range(len(string)-1):
    if string[i] == string[i+1]:
        counter = counter+1


print (counter)
现在,我不明白如何从上面的迭代程序中编写递归函数。我试图将我的基本情况想象为:

if string == "":
   return (0)

我不确定我在这方面是否正确。有人能帮我做这个吗?谢谢

对于Python来说,这是一种愚蠢的赋值,但是在其他使用不同基本数据类型的语言中,如cons列表而不是数组,这是有意义的

您知道如何为2元素字符串编写
计数器

对于3元素字符串,您在
s[:2]
上进行2元素计数,然后在
s[1://code>上进行2元素计数

对于4元素字符串,您在
s[:2]
上进行2元素计数,然后在
s[1://code>上进行3元素计数

对于N元素字符串,您在
s[:2]
上进行2元素计数,然后在
s[1://code>上进行N-1元素计数


当然,这不包括0-element和1-element的大小写,但您可以为此再添加两个基本大小写。

您的逻辑假设字符串中有两个字符,因此我认为您需要两个基本大小写,分别用于空字符串和一个字符串。(或短于2的字符串的一个基本情况)

也许是这样的:

def count_doubles(string):
    if len(string) < 2:
        return 0
    else:
        if string[0] == string[1]:
            return count_doubles(string[1:]) + 1
        else:
            return count_doubles(string[1:])

>>> count_doubles("hellmoo")
2

使用包装器定义基本递归:

def recursion(str, idx):
    if (idx + 1 == len(str)):
        return 0
    if (str[idx+1] == str[idx]):
        return 1 + recursion(str, idx + 1)
    return recursion(str, idx + 1)

def count(str):
    if len(str) == 0:
        return 0
    return recursion(str, 0)

>>> count("hellmoo")
2
>>> count("hellbb")
2
>>> count("hellbbvv")
3
>>> count("hh")
1
>>> count("")
0

对于
count(“aaaa”)
,您会返回什么?对不起,我忘了提到假设字符对基本上不重叠,如果您迭代整个字符串,您应该返回0,如果不重叠,请检查当前字符和下一个字符,查看我的答案。感谢您的回答。我正在寻找一个功能单一的东西。这可能吗?在count中定义递归谢谢你的代码。这和我要找的东西很相似。然而,当我试图运行这段代码时,没有输出——只有空白。它应该计算字符串中重复的字符对。有什么我遗漏了吗?@john你到底想运行什么(显示你的代码),这个函数得到一个字符串并返回整数。
def count\u double(string):if len(string)<2:返回0其他:if string[0]==string[1]:返回count\u double(string[1:])+1其他:返回count double(string[1:])count_doubles(“hello”)
我想知道我是否做了正确的事情这就是函数,我的意思是,你调用这个函数的代码是什么?我更新了答案,使它更精确clear@Elisha调用此函数的代码位于我前面的注释末尾。这与调用此函数的方式类似
def recursion(str, idx):
    if (idx + 1 == len(str)):
        return 0
    if (str[idx+1] == str[idx]):
        return 1 + recursion(str, idx + 1)
    return recursion(str, idx + 1)

def count(str):
    if len(str) == 0:
        return 0
    return recursion(str, 0)

>>> count("hellmoo")
2
>>> count("hellbb")
2
>>> count("hellbbvv")
3
>>> count("hh")
1
>>> count("")
0