编写递归函数

时间:2015-05-05 07:23:56

标签: 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)

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

if string == "":
   return (0)

我不确定我是否正确。有人可以帮我这么做吗?谢谢!

3 个答案:

答案 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