挑剔数列和递归算法

来源:互联网 发布:广联达预算软件使用 编辑:程序博客网 时间:2024/05/27 16:42

前几天的一道笔试题:

有一种很特别的数列 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 时,没有该挑剔数列。


以上。

0 0
原创粉丝点击