完整问题:设计一个递归算法,该算法将显示是否可以从整数列表中选择两个整数,以便两个整数的差值等于给定的值。提示:您可能希望调用另一个算法(即函数),它接受执行递归的更多参数。提交一个python函数is_diff_two(值,diff),它将一个列表和所需的差异作为一个非负整数,并返回true或false。您可以使用的唯一功能是: print、str、int、float、bool、len、list、range、abs、圆形、pow。我们不会扣减str()的使用,但是您实际上并不需要它。不要导入库。
关键字允许: if,elif,or,或,或,not,返回,def,断言,
关键字不允许: for,while,in,import。
请注意,您不能使用切片(AKA冒号在您的起诉书)。
实现这个算法有困难;我不确定基本情况是什么,如何使用助手方法,或者如何在不使用循环或python列表切片的情况下解决问题。我目前拥有的是一个名为check_diff()的助手方法,它将一个列表作为参数,递归地遍历列表,并将原始列表中的所有值之间的所有可能的差异附加到一个新列表中。然后,我将在一行检查中调用is_diff_two()方法中的方法,以查看diff参数是否在列表中--如果是这样的话,它应该返回true,如果不是,则返回false。到目前为止,这是我的助手方法所拥有的,但我无法弄清楚如何正确地递归列表并获得所有可能的差异。
def check_diff(values):
diff_list = []
if len(values) == 1:
return diff_list
else:
diff_list.append(values[0] - check_diff(values[1]))
return values[0] - check_diff(values[1])发布于 2019-10-04 21:49:19
您可以创建一个函数,该函数可选择地接受给定列表的两个索引,并对第二个索引进行递归调用,直到其超出范围为止,此时对第二个索引进行递归调用,直到其超出范围为止。此时,如果在两个索引上没有发现与目标值不同的两个值,则返回False;如果找到任何这样的值,则返回True:
def is_diff_two(values, diff, a=0, b=1):
if a == len(values):
return False
if b == len(values):
return is_diff_two(values, diff, a + 1, a + 2)
return abs(values[a] - values[b]) == diff or is_diff_two(values, diff, a, b + 1)因此,is_diff_two([2, 4, 8], 3)返回False,is_diff_two([2, 4, 8], 4)返回True。
https://stackoverflow.com/questions/58243369
复制相似问题