我正在尝试在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)
我不确定我是否正确。有人可以帮我这么做吗?谢谢!
答案 0 :(得分:1)
你的逻辑假定字符串中有两个字符,所以我认为你需要两个基本情况,对于空字符串和一个字符串。 (或一个基本情况下,字符串短于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
P.S。
我不知道你为什么要用递归来做这件事,我不认为这个任务是个好主意
一种更加pythonic的方式可以是:
>>> string = "hellmoo"
>>> len(filter(lambda x:x[0]==x[1],zip(string[1:],string[:-1])))
2
答案 1 :(得分:0)
对于Python来说,这是一个愚蠢的任务,但在使用不同基本数据类型的其他语言中,如cons-list而不是数组,这是有道理的。
您知道如何为{2}字符串编写counter
。
对于3元素字符串,您在s[:2]
上执行2元素计数,然后在s[1:]
上执行2元素计数。
对于4元素字符串,您在s[:2]
上执行2元素计数,然后在s[1:]
上执行3元素计数。
对于N元素字符串,您在s[:2]
上执行2元素计数,然后在s[1:]
上执行N-1个元素计数。
当然,这会遗漏0元素和1元素的情况,但你可以为此增加2个基本情况。
答案 2 :(得分:0)
使用包装器定义基本递归:
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