使用递归计算字符串中某个字符的实例

这个问题出现在我的期中,我意识到我做得不对,所以我想知道我哪里做错了。

我正在尝试定义一个函数count_char(string,char),该函数通过使用递归返回char处于问候状态的总次数。


def count_char(string,char):
    #base case:
    if len(string) < 1:
        return
    #recursive case:
    if string[-1] == char:
        total = count_char(string[0:len(string)-1],char) + 1
    return total

运行count_char("hello","h")时出现错误:

  

UnboundLocalError:分配前已引用局部变量“总计”

我不确定我还会怎么做,以便总数不是局部变量。

winner418 回答:使用递归计算字符串中某个字符的实例

如错误中所述,如果char不在字符串中,则total尚未定义。您应该考虑的另一件事是字符串为空的情况,在这种情况下,您想返回0,以便它可以传播回递归堆栈。

考虑以下修改后的代码:

def count_char(string,char):
    #base case:
    if len(string) < 1:
        return 0
    #recursive case:
    if string[-1] == char:
        return count_char(string[0:len(string)-1],char) + 1
    return count_char(string[0:len(string)-1],char)
,

正如Carcigenicate所说,之所以会出现问题,是因为无法保证if条件成立,并且if内部是函数中声明和定义total的唯一位置

这是执行此操作的另一种方法:

def count_char(string,char):
    #base case:
    if len(string) is 0:
        return 0
    #recursive case:
    total = int(string[-1] == char) + count_char(string[:-1],char)
    return total

此外,从基本案例和递归案例中返回int更为一致。

本文链接:https://www.f2er.com/3120413.html

大家都在问