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
,告知参数中的字符是否按字母顺序排列
就像我定义saidsortfunc('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的。