打印折纸凹凸痕迹

打印折纸凹凸痕迹

折纸问题

【题目】
请把一段纸条竖着放在桌子上,然后从纸条的下边向上方对折1次,压出折痕后展开。此时折痕是凹下去的,即折痕突起的方向指向纸条的背面。
如果从纸条的下边向上方连续对折2次,压出折痕后展开,此时有三条折痕,从上到下依次是下折痕、下折痕和上折痕。
给定一个输入参数N,代表纸条都从下边向上方连续对折N次,请从上到下打印所有折痕的方向。

算法思路

 下
下 上
产生第i+1次折痕的过程,就是在第i次对折产生的每一条折痕的左右两侧,依次插入下折痕上折痕的过程。
中序遍历:左 头 右
算法时间复杂度为O( 2 n 2^n 2n),空间复杂度为O(n)。


相应代码

递归实现

def printAllFolds(N):
    printProcess(1, N, True)
    print()

def printProcess(i, N, down):
    if i > N:
        return
    printProcess(i+1, N, True)
    if down is True:
        print('down', end=' ')
    else:
        print('up', end=' ')
    printProcess(i + 1, N, False)

# 简单测试
if __name__ == '__main__':
    printAllFolds(1)  # down
    printAllFolds(2)  # down down up
    printAllFolds(3)  # down down up down down up up

有任何疑问和建议,欢迎在评论区留言和指正!

感谢您所花费的时间与精力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值