python递归_Python 进阶之递归(一)

60d1aabdb6d37966ae474dd8d50f4b5b.png

大家好,我是一只初入编程坑的生物狗。在学习python的过程中整理了一下自己的资料分享给大家,同是小白的朋友们可以拿来练习,提升自信(如果我这只笨笨的生物狗都可以编代码的话你萌也木问题的!)肯定有很多不足的地方,也麻烦大家指出好帮助我进步!

Okay without further ado, 我们开始了哈。

递归(Recursion)是我学coding以来最头疼的部分之一。不像loop可以被直接又清晰地track,recursion 运行的方式和人类思维不一样,而且教授总是可以把recursion玩出花来有木有。今天这里就给大家分享分叉树递归的练习:

d282e09743a292af45bf6b61e58b9ad1.png

练习一:给你一个数组,里面都是整数,再给你另一个单独的整数(target),请问你可不可以在这个数组中找出一个子集,使子集中数字的和等于这个单独的整数。return 的是True(有这个子集) 和 False(没有这个子集)

这是一个非常典型的分叉递归,注意你并不知道多少个整数他们的和可以等于这个target,有可能一个整数就等于了这个target,也有可能需要好几个。换个角度想,对于数列中的每一个数字,你都有两个选择:把它加入到你的推测的子集中,看看这个子集的和是不是等于target,或者不让它加入到你的推测的子集中,这里就是递归中分叉的地方了:

start:指针从0依次go through整个数组;nums:给出的数组;target:目标整数

a6dfbfe2c26b1a10b624e86f0ff36d29.png
我用IDLE大家可以不嫌弃我咩> <

下面加上个限定条件再练习下:

练习二:练习一+限定条件:数组中的每一个6必须被选入子集中

76d54f61f1ce312c0a5d9132985d8300.png
是不是很简单!

练习三:练习一+限定条件:如果一个数字被选到子集,那么它后面的数字就不能被选中

f0a679b0fb0dcd89b029dc534917f907.png
发现玄机了吗?

练习四:再复杂一点:练习一+限定条件:如果相同数字在数组中位置比邻,那么要么他们被一起选中,要么他们一起不被选中。例如[1, 2, 2, 2, 5, 2],中间三个2要么一起选中,要么一起不被选中

9dd7ecbd589f176ca4bd6c5814e6e75c.png

刚接触递归的时候只觉得很麻烦,何苦自己绕晕自己> <直到在排列组合问题上才发现它的强大。这节先到这里啦,希望大家多指教!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值