大家好,我是一只初入编程坑的生物狗。在学习python的过程中整理了一下自己的资料分享给大家,同是小白的朋友们可以拿来练习,提升自信(如果我这只笨笨的生物狗都可以编代码的话你萌也木问题的!)肯定有很多不足的地方,也麻烦大家指出好帮助我进步!
Okay without further ado, 我们开始了哈。
递归(Recursion)是我学coding以来最头疼的部分之一。不像loop可以被直接又清晰地track,recursion 运行的方式和人类思维不一样,而且教授总是可以把recursion玩出花来有木有。今天这里就给大家分享分叉树递归的练习:
练习一:给你一个数组,里面都是整数,再给你另一个单独的整数(target),请问你可不可以在这个数组中找出一个子集,使子集中数字的和等于这个单独的整数。return 的是True(有这个子集) 和 False(没有这个子集)
这是一个非常典型的分叉递归,注意你并不知道多少个整数他们的和可以等于这个target,有可能一个整数就等于了这个target,也有可能需要好几个。换个角度想,对于数列中的每一个数字,你都有两个选择:把它加入到你的推测的子集中,看看这个子集的和是不是等于target,或者不让它加入到你的推测的子集中,这里就是递归中分叉的地方了:
start:指针从0依次go through整个数组;nums:给出的数组;target:目标整数
下面加上个限定条件再练习下:
练习二:练习一+限定条件:数组中的每一个6必须被选入子集中
练习三:练习一+限定条件:如果一个数字被选到子集,那么它后面的数字就不能被选中
练习四:再复杂一点:练习一+限定条件:如果相同数字在数组中位置比邻,那么要么他们被一起选中,要么他们一起不被选中。例如[1, 2, 2, 2, 5, 2],中间三个2要么一起选中,要么一起不被选中
刚接触递归的时候只觉得很麻烦,何苦自己绕晕自己> <直到在排列组合问题上才发现它的强大。这节先到这里啦,希望大家多指教!