带字母顺序的递归函数

2024-09-24 22:28:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想定义一个递归函数,该函数传递一个str,并返回一个bool,说明参数中的字符是否按字母顺序排列。在

就像我定义said sortfunc('abcdefg'),它将返回True;而{}将返回{}。在

我该怎么做?这就是我目前所拥有的。。。但我有点卡住了。我了解递归的概念,但不知道如何实现它。在

def sortfunc(s):
    if s == '':
        return False
    else:
        return True if s[0] < s[1:] else False

Tags: 函数falsetrue参数returnif定义字母
3条回答

没有更少的编程逻辑!在

->将字符串拆分为数组并将此数组发送到函数

->;通过将值转换为各自的ascii值,我们可以轻松地比较这些值

sortfunc(str) {

for(int i=0;i<str.length;i++){

if ( (int) str[i] >(int) str[i+1] ) {
result = true
}
else
result = false;

return result;
}

在您的尝试中,您缺少递归部分。请检查以下实现。在

def sortfunc(current_string, previous_character = ""):
    if current_string == "":
        return True         # Base condition
    if previous_character and previous_character > current_string[0]:
        return False        # Failure case
    return sortfunc(current_string[1:], current_string[0])  # Recursion

如果你想知道如何在没有递归的情况下做到这一点

^{pr2}$

样本运行:

print sortfunc('abcdefg')   # True
print sortfunc('banana')    # False

以下是一种可能的方法:

def is_sorted(s):
    if len(s) == 1:
        return True               # Base case
    elif s[0] <= s[1]:
        return is_sorted(s[1:])   # Recursive case
    else:
        return False              # Base case

说明:

因此,每当我们要编写递归函数时,我们总是需要考虑以下几点:

  1. 如何将问题分解成更小的步骤?
  2. 什么是基本情况?(何时可以停止递归?)
  3. 什么是递归情况?(我什么时候需要继续走?)

对我来说,第一步总是解决问题最棘手的一步。通常,一旦我们弄清楚这一步,其余的就都安排好了。在

通常有很多不同的方法来分解一个问题,在某种程度上,你选择哪一个有点武断。在本例中,我选择通过反复比较字符串中的前两个字符来分解问题。在

如果这两个字符是有序的,那么我重复这个过程,除了删除第一个字符之外。如果字符串中只剩下一个字符,或者前两个字符顺序不对,我知道我可以停止并分别返回True或{}。在

例如,如果我们将调用is_sorted('abcd')可视化,它将如下所示:

^{pr2}$

相比之下,如果我们尝试调用is_sorted('azbc'),它看起来像这样:

call is_sorted('azbc')
    'a' is less then 'z'
    call is_sorted('zbc')
        'z' is NOT less than 'b', return False
    return False

那么,下面是三个步骤的答案:

  1. 如何将问题分解成更小的步骤?
    继续比较前两个字符

  2. 什么是基本情况?(何时可以停止递归?)
    如果两个字符顺序不对,或者我只剩下一个字符

  3. 什么是递归情况?(我什么时候需要继续走?)
    如果我的字符串中还有两个或更多的字符。

注意,递归的情况总是需要一个“信心的飞跃”,您必须相信调用is_sorted方法将准确地告诉您字符串的其余部分(除了前两个字符)是否正确排序。感觉有点奇怪,感觉好像我们从来没有明确告诉代码如何确定字符串是否编码,或者传递任何信息,但它无论如何都是这样做的!在

然而,这正是递归之美的一部分:只要我们正确地定义了基本情况和递归情况,它就会神奇地工作。在

相关问题 更多 >