我需要编写一个给定输入列表的函数,列表中的所有相邻元素都相互交换。如果列表的长度是奇数,那么最后一个元素保持放置。我写的功能迭代,就像这样:以迭代和递归的方式在列表中交换对-Python3
>>>def swap(nums):
for i in range(0,len(nums),2):
try:
nums[i],nums[i+1] = nums[i+1], nums[i]
except:
pass
return nums
>>>swap([1,2,3,4,5])
[2, 1, 4, 3, 5]
我像以前一样使用完全相同的逻辑递归版本:
def swap(nums, c=0):
try:
nums[c], nums[c+1] = nums[c+1], nums[c]
return swap(nums, c+2)
except:
return nums
虽然两者的工作,我觉得我欺骗了一下用这些try/except
块,我不会一直使用它们成为更好的程序员。任何人都可以给我建议如何解决这些问题,而不依赖于try/except
块?
你的第二个功能是不是真正利用递归背后的理念。递归通常需要一步*来简化问题,然后将简化的问题传递给它自己(下一个递归步骤)。递归函数的基本结构总是:1.停止条件; 2.递归步骤。如何解决问题的方法是检查长度<2(停止条件),否则交换前两个元素并附加nums [2:] recusion的结果。 – agtoever