如果'那么递归不会停止。

时间:2016-10-05 18:34:32

标签: string python-2.7 loops recursion

我正在尝试编写一个代码,如果给定的字符串最多连续2个c,并且最大值为1 b,则打印True。我正在使用递归来减少字符串并检查最大值' c'两次出现在同一个索引中。但是我的递归并没有停止,直到它清空整个列表。你能否说一下我的代码有什么问题?谢谢!

def stringcond(N,count=0,k=0):
    N=list(N)
    if(N.count('b')>1):
        return False
    if len(N)<2:
        return True
    else:
        for i,j in enumerate(N):
            if(j=='c'):
                del N[i]
                count+=1
            if(k==i and count>2):
                return False
            stringcond(N,count=count,k=i)
    return True

2 个答案:

答案 0 :(得分:0)

您必须使用字符串调用的结果。现在,您的函数将只返回在顶级调用中确定的任何内容。

答案 1 :(得分:0)

你有几个错误。首先,为什么要将字符分成列表?字符串有一个非常好的 count 方法。

您的递归失败,因为您忽略了返回值。你会想要像

这样的东西
if not stringcond(N,count=count,k=i):
    return False
# I make no claim that this logic is correct.

无论如何,没有必要再发生。使用计数来检查&#34; b&#34;的数量还有很多 - &#39; c&#39;子:

def stringcond(s, c_max=0):
    return s.count('b') <= 1 and \
           s.count("c" * (c_max+1)) == 0