前几天的一道笔试题:
有一种很特别的数列 L(n),定义为:把集合{1,2,3,...,n,1,2,3,...,n}的数字进行重新排列,使得1和1之间的距离为1,2和2之间的距离为2,3和3之间的距离为3,4和4之间的距离为 4 等等。
Python实现,Version 1.0:
输出结果:
放置的数是随机的,所以经常出现递归栈溢出的情况。虽然多试几次还是能获得结果,但是不太理想。
阅读递归资料的时候想到了要加一个redo的操作,改进之后,Version 2.0:
实现方法可以行得通了。
4的输出:
7的输出:
15的输出:
中间有写数字无法输出,比如9:
就是说,我从代码中操作集pop,结果pop为空,redo的数量满足了,相当于撤销还是无法完成该数列,因此,猜想,某些长度是无法生成该数列的。
了解到,该数列是一个挑剔数列,当n∈属于{0, 1, 2, 3 ... n ... }时,length 等于 4n+1 与 4n+2 时,没有该挑剔数列。
以上。