2024-09-24 22:28:28 发布
网友
我想定义一个递归函数,该函数传递一个str,并返回一个bool,说明参数中的字符是否按字母顺序排列。在
str
bool
就像我定义said sortfunc('abcdefg'),它将返回True;而{}将返回{}。在
sortfunc('abcdefg')
True
我该怎么做?这就是我目前所拥有的。。。但我有点卡住了。我了解递归的概念,但不知道如何实现它。在
def sortfunc(s): if s == '': return False else: return True if s[0] < s[1:] else 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; }
在您的尝试中,您缺少递归部分。请检查以下实现。在
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
如果你想知道如何在没有递归的情况下做到这一点
样本运行:
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
说明:
因此,每当我们要编写递归函数时,我们总是需要考虑以下几点:
对我来说,第一步总是解决问题最棘手的一步。通常,一旦我们弄清楚这一步,其余的就都安排好了。在
通常有很多不同的方法来分解一个问题,在某种程度上,你选择哪一个有点武断。在本例中,我选择通过反复比较字符串中的前两个字符来分解问题。在
如果这两个字符是有序的,那么我重复这个过程,除了删除第一个字符之外。如果字符串中只剩下一个字符,或者前两个字符顺序不对,我知道我可以停止并分别返回True或{}。在
例如,如果我们将调用is_sorted('abcd')可视化,它将如下所示:
is_sorted('abcd')
相比之下,如果我们尝试调用is_sorted('azbc'),它看起来像这样:
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
那么,下面是三个步骤的答案:
如何将问题分解成更小的步骤? 继续比较前两个字符
什么是基本情况?(何时可以停止递归?) 如果两个字符顺序不对,或者我只剩下一个字符
什么是递归情况?(我什么时候需要继续走?) 如果我的字符串中还有两个或更多的字符。
注意,递归的情况总是需要一个“信心的飞跃”,您必须相信调用is_sorted方法将准确地告诉您字符串的其余部分(除了前两个字符)是否正确排序。感觉有点奇怪,感觉好像我们从来没有明确告诉代码如何确定字符串是否编码,或者传递任何信息,但它无论如何都是这样做的!在
is_sorted
然而,这正是递归之美的一部分:只要我们正确地定义了基本情况和递归情况,它就会神奇地工作。在
没有更少的编程逻辑!在
->将字符串拆分为数组并将此数组发送到函数
->;通过将值转换为各自的ascii值,我们可以轻松地比较这些值
在您的尝试中,您缺少递归部分。请检查以下实现。在
如果你想知道如何在没有递归的情况下做到这一点
^{pr2}$样本运行:
以下是一种可能的方法:
说明:
因此,每当我们要编写递归函数时,我们总是需要考虑以下几点:
对我来说,第一步总是解决问题最棘手的一步。通常,一旦我们弄清楚这一步,其余的就都安排好了。在
通常有很多不同的方法来分解一个问题,在某种程度上,你选择哪一个有点武断。在本例中,我选择通过反复比较字符串中的前两个字符来分解问题。在
如果这两个字符是有序的,那么我重复这个过程,除了删除第一个字符之外。如果字符串中只剩下一个字符,或者前两个字符顺序不对,我知道我可以停止并分别返回}。在
True
或{例如,如果我们将调用
^{pr2}$is_sorted('abcd')
可视化,它将如下所示:相比之下,如果我们尝试调用
is_sorted('azbc')
,它看起来像这样:那么,下面是三个步骤的答案:
如何将问题分解成更小的步骤?
继续比较前两个字符
什么是基本情况?(何时可以停止递归?)
如果两个字符顺序不对,或者我只剩下一个字符
什么是递归情况?(我什么时候需要继续走?)
如果我的字符串中还有两个或更多的字符。
注意,递归的情况总是需要一个“信心的飞跃”,您必须相信调用
is_sorted
方法将准确地告诉您字符串的其余部分(除了前两个字符)是否正确排序。感觉有点奇怪,感觉好像我们从来没有明确告诉代码如何确定字符串是否编码,或者传递任何信息,但它无论如何都是这样做的!在然而,这正是递归之美的一部分:只要我们正确地定义了基本情况和递归情况,它就会神奇地工作。在
相关问题 更多 >
编程相关推荐