Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 字母顺序递归函数_Python_Sorting_Recursion - Fatal编程技术网

Python 字母顺序递归函数

Python 字母顺序递归函数,python,sorting,recursion,Python,Sorting,Recursion,我想定义一个递归函数,它传递一个str,并返回一个bool,告知参数中的字符是否按字母顺序排列 就像我定义saidsortfunc('abcdefg')它将返回True;而sortfunc('banana')将返回False 我将如何处理这个问题?这就是我目前所拥有的。。。但我有点被卡住了。我理解递归的概念,但不知道如何实现它 def sortfunc(s): if s == '': return False else: return True i

我想定义一个递归函数,它传递一个
str
,并返回一个
bool
,告知参数中的字符是否按字母顺序排列

就像我定义said
sortfunc('abcdefg')
它将返回
True
;而
sortfunc('banana')
将返回
False

我将如何处理这个问题?这就是我目前所拥有的。。。但我有点被卡住了。我理解递归的概念,但不知道如何实现它

def sortfunc(s):
    if s == '':
        return False
    else:
        return True if s[0] < s[1:] else False
def sortfunc(s):
如果s='':
返回错误
其他:
如果s[0]
在您的尝试中,您缺少递归部分。请检查以下实现

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
如果你想知道如何在没有递归的情况下做到这一点

def sortfunc(current_string):
    return "".join(sorted(current_string)) == current_string
样本运行:

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

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

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
如果你想知道如何在没有递归的情况下做到这一点

def sortfunc(current_string):
    return "".join(sorted(current_string)) == current_string
样本运行:

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

没有更少的编程逻辑

->将字符串拆分为一个数组,并将此数组发送给函数

->我们可以通过将值转换为各自的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;
}
sortfunc(str){
对于(int i=0;i(int)str[i+1]){
结果=真
}
其他的
结果=假;
返回结果;
}

没有更少的编程逻辑

->将字符串拆分为一个数组,并将此数组发送给函数

->我们可以通过将值转换为各自的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;
}
sortfunc(str){
对于(int i=0;i(int)str[i+1]){
结果=真
}
其他的
结果=假;
返回结果;
}

这里有一种可能的方法:

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
相反,如果我们尝试调用
is_sorted('azbc')
,它看起来会像这样:

call is_sorted('abcd')
    'a' is less then 'b'
    call is_sorted('bcd')
        'b' is less then 'c'
        call is_sorted('cd')
            'c' is less then 'd'
            call is_sorted('d')
                only one character left, return True
            return True
        return True
    return True
call is_sorted('azbc')
    'a' is less then 'z'
    call is_sorted('zbc')
        'z' is NOT less than 'b', return False
    return False
下面是三个步骤的答案:

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

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

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

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


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

    这里有一种可能的方法:

    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
    
    相反,如果我们尝试调用
    is_sorted('azbc')
    ,它看起来会像这样:

    call is_sorted('abcd')
        'a' is less then 'b'
        call is_sorted('bcd')
            'b' is less then 'c'
            call is_sorted('cd')
                'c' is less then 'd'
                call is_sorted('d')
                    only one character left, return True
                return True
            return True
        return True
    
    call is_sorted('azbc')
        'a' is less then 'z'
        call is_sorted('zbc')
            'z' is NOT less than 'b', return False
        return False
    
    下面是三个步骤的答案:

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

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

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

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


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

    为什么是递归函数?因为这是一个家庭作业?是的,我现在是这门语言的新手。我想要一些帮助!很抱歉,在我们为您做家庭作业之前,您需要说明您尝试了什么以及遇到了什么具体问题。@msvalkon,:)@user2559679由于
    sortfunc()
    返回布尔值,您不应该用
    为什么使用递归函数比较两个布尔值?因为这是一个家庭作业?是的,我现在是这门语言的新手。我想要一些帮助!很抱歉,在我们为您做家庭作业之前,您需要说明您尝试了什么以及遇到了什么具体问题。@msvalkon,:)@user2559679因为
    sortfunc()
    返回bool,您不应该用
    比较两个boolean。使用“.join”(sorted())进行迭代对我来说很容易但事实证明我必须使用递归。我也只能传递一个参数。@user2559679检查答案中的第一个示例,即递归。使用“.join(sorted())进行迭代对我来说很容易,但事实证明我必须使用递归。我也只能传递一个参数。@user2559679检查答案中的第一个例子,它是递归的。不应该是
    不应该是
    吗?我相信OP是在学习python,所以这样的问题是特定于python的。我相信OP是在学习python,所以这样的话,问题是特定于python的。