#算法#第31天,我终于被递归打败了,禁止套娃太应该了!


今天主要学的内容是多值参数和递归两部分内容 , 多值参数还好 , 虽然有一点绕 , 但琢磨下也就过去了 。
但是 , 递归是真的难 , 完全是对脑回路的考验 。
绕老绕去的 , 太折腾人了 。
以前有人说禁止套娃我还不太明白原因 , 现在看来 , 估计都是被递归毒打过的可怜人吧 。
#算法#第31天,我终于被递归打败了,禁止套娃太应该了!
本文插图
多值参数253集 , 定义及作用
开发时 , 有时定义的函数处理的参数 个数 是不确定的 , 这个时候 , 就可以使用 多值参数 。
Python 有 两种 多值参数:参数名前增加 一个 *, 可以接收元组;参数名前增加 两个 *, 可以接收 字典 。
一般给多值参数命名时 , 习惯使用以下两个名字:*args(argumengts) , 存放 元组 参数 , 前面有一个 * ; **kwargs(keyword) 存放 字典 参数 , 前面有两个 *。
#算法#第31天,我终于被递归打败了,禁止套娃太应该了!
本文插图
使用多值参数的时候 , 调用的时候 , 依然用逗号一个个分割每个参数 。
提示:多值参数 的应用会经常出现在网络上一些大牛开发的框架中 , 知道多值参数 , 有利于我们能够读懂大牛的代码 。
254集 , 数字累加案例演练
演练需求:定义一个函数 sum_members, 可以接收的 任意多个整数 。 功能要求:将传递的 所有数字累加 并且返回累加的结果 。
#算法#第31天,我终于被递归打败了,禁止套娃太应该了!
本文插图
多值参数可以让函数传递参数时更加简单 。
255集 , 元组和字典的拆包
在调用带有多值参数的函数时 , 如果希望:将一个 元组变量 , 直接传递给 args;将一个 字典变量 , 直接传递给 kwargs 时 , 就可以使用拆包 , 简化参数的传递 。
比如下面这个例子 , 就把两个变量都按照元组输出了 。
#算法#第31天,我终于被递归打败了,禁止套娃太应该了!
本文插图
问题是 , 我演练了一下 , 如果直接把形参的星号去掉 , 直接就可以正常输出了 , 所以没必要拆包啊 , 这不是多此一举了嘛 。
拆包的方式是:在 元组变量前 , 增加 一个* ;在字典变量前 , 增加 两个** 。
#算法#第31天,我终于被递归打败了,禁止套娃太应该了!
本文插图
拆包语法 , 可以简化元组变量和字典变量的传递 。
递归256集 , 递归的特点及基本代码演练
函数调用自身的 编程技巧 称为递归 。
【#算法#第31天,我终于被递归打败了,禁止套娃太应该了!】既然函数内部可以调用其他函数 , 当然在函数内部也可以调用自己 。
代码特点:函数内部的 代码 是相同的 , 只是针对 参数 不同 , 处理的结果不同;
当 参数满足一个条件 时 , 函数不再执行 , 这点非常重要 , 通常被称为递归的出口 , 否则 会出现死循环!
#算法#第31天,我终于被递归打败了,禁止套娃太应该了!
本文插图
257集 , 递归演练代码的执行流程图
将上一集的程序进行更详细的讲解 。
#算法#第31天,我终于被递归打败了,禁止套娃太应该了!
本文插图
虽然在代码中 , 我们只调用了1次函数 , 但函数在执行时 , 调用了3次 。
递归的出口非常重要 , 只有到达了出口 , 函数才会一层一层返回 。
感觉递归这东东 , 有点盗梦空间的意思啊 。
#算法#第31天,我终于被递归打败了,禁止套娃太应该了!


推荐阅读