递归

           假设你在祖母的阁楼中翻箱倒柜,发现了一个上锁的神秘手提箱。祖母告诉你,钥匙很可能在下面这个盒子里。这个盒子里有盒子,而盒子里的盒子又有盒子。钥匙就在某个盒子中。为找到钥匙,你将使 用什么算法?先想想这个问题,再接着往下看。

        下面是一种方法:

                (1) 创建一个要查找的盒子堆。

                (2) 从盒子堆取出一个盒子,在里面找。

                (3) 如果找到的是盒子,就将其加入盒子堆中,以便以后再查找。

                (4) 如果找到钥匙,则大功告成!

               (5) 回到第二步。

      下面是另一种方法:

              (1) 检查盒子中的每样东西。

              (2) 如果是盒子,就回到第一步。

              (3) 如果是钥匙,就大功告成!

在你看来,哪种方法更容易呢?第一种方法使用的是while循环:只要盒子堆不空,就从中 取一个盒子,并在其中仔细查找。

def look_for_key(main_box):

        pile = main_box.make_a_pile_to_look_through()

       while pile is not empty:

              box = pile.grab_a_box()

             for item in box:

                 if item.is_a_box():

                     pile.append(item)

                 elif  item.is_a_key():

                    print "found the key!"

第二种方法使用递归——函数调用自己,这种方法的伪代码如下。

def look_for_key(box):

    for item in box:

         if item.is_a_box():

             look_for_key(item)

       elif item.is_a_key():

             print "found the key!"

这两种方法的作用相同,但在我看来,第二种方法更清晰。递归只是让解决方案更清晰,并 没有性能上的优势。实际上,在有些情况下,使用循环的性能更好。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值