挑剔数列和递归算法

前几天的一道笔试题:

有一种很特别的数列 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值