如何递归地分割列表并比较相邻的值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何递归地分割列表并比较相邻的值相关的知识,希望对你有一定的参考价值。
enter code here
如果不提供解决方案,有人可以帮助我了解如何表示此模式。我认为您需要检查以递归方式查看nth + 1> nth值。由于这不是一个列表,我想我需要使用模和底数除法来遍历该列表。但是,只有两个return语句,我不知道如何递归调用该函数以及如何返回True和False。
问题陈述:孔号是一个数字,其中每隔一个数字就降到与其紧邻的数字之下。例如,数字968将被视为孔号,因为数字6小于其两个周围的数字。假设我们只传递数字为奇数的数字。定义以下功能,以便正确识别孔号。
def check_hole_number(n):
"""
>>> check_hole_number(123)
False
>>> check_hole_number(3241968)
True
>>> check_hole_number(3245968)
False
"""
if _________________________________________________________:
return _________________________________________________________
return ______________________________________________________________
我的解决方案:
def check_hole_number(n):
if n // 10 == 0:
return True
return (n % 10) > (n // 10 % 10) and (n // 10 % 10) < (n // 100 % 10) \
and check_hole_number(n // 100)
模式将类似于:
您必须在每个步骤中检查当前数字的前3位数字:
- 检查(在
if
语句中)如果前三个数字符合hole number
条件 如果前3位数字符合
hole number
条件,则请检查当前步骤中是否具有最后3
位数字:- [如果您有最后3位数字,那么您应该返回
True
(您已经检查了所有其余数字,现在您确定数字是hole number
)] - 如果没有最后3位数字,则必须再次调用函数以检查接下来的数字(必须跳过前2位数字)
- [如果您有最后3位数字,那么您应该返回
如果当前的前三位数不是
hole number
,则应返回False
def check_hole_number(n):
"""
>>> check_hole_number(123)
False
>>> check_hole_number(3241968)
True
>>> check_hole_number(3245968)
False
"""
if str(n)[1] < str(n)[0] and str(n)[1] < str(n)[2]:
return True if len(str(n)) == 3 else check_hole_number(str(n)[2:])
return False
此外,您也可以检查当前步骤中的最后3位数字:
def check_hole_number(n):
"""
>>> check_hole_number(123)
False
>>> check_hole_number(3241968)
True
>>> check_hole_number(3245968)
False
"""
if n // 10 % 10 < n % 10 and n // 10 % 10 < n % 1000 // 100:
return True if n < 1000 else check_hole_number(n // 100)
return False
我在下面实现了一个示例,欢迎您寻求帮助。如果您不希望这样做,请遵循以下提示:
作为提示:
如果使用递归,则始终需要一个终止条件,否则,该函数将无休止地进行自身调用,因此请考虑不应使用哪些输入再次调用该函数。如果使用此输入调用了您的函数(通过递归调用),则只需返回一个值,一个布尔值,就不必再次调用该函数。
您已经在使用正确的方式来定义递归的新函数调用,但是实际上n [1:]可以用作新输入吗?再考虑一下,并使用示例手动浏览该功能。
何时需要另一个函数调用?或者换句话说:什么时候可以确定输入
n
不是孔号?设置此条件并根据条件是true还是false设置函数调用。一般提示:
int
类型的变量在Python中不可下标,因此您始终必须将数字转换为str
,即字符串表示形式
!剧透;-)!一个示例实现(仅在以下假设下有效:inputNumber mod 2 != 0
)在这里能找到它:https://www.codepile.net/raw/NpoRbalV.py
以上是关于如何递归地分割列表并比较相邻的值的主要内容,如果未能解决你的问题,请参考以下文章