Python 编写递归函数
我试图用Python编写一个递归函数来计算字符串中重复字符对的数量。示例:“hellmoo”=2 为了让我开始,我首先尝试编写一个迭代版本的程序。以下是我的尝试: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) 现在,我不明白如何从上
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