4.6 Python3 进阶 - 递归函数
>>返回主目录


源码
# 定义及特性
# 简单递归思维练习,求和:1+2+3+…+100
# 思路:sum(100) = sum(99) + 100
# sum(99) = sum(98) + 99
# ……
# sum(2) = sum(1) + 2
# sum(1) = 1
def sum_num(n):
if n == 1: # 出口
return 1
return n + sum_num(n - 1)
print(sum_num(5))

源码
# 优缺点
# 巩固递归思维,求:5!
# 思路:5! = 1 * 2 * 3 * 4 * 5 = 5 * 4! = 5 * (4 * 3!)
# 利用数学归纳法,推导出递归表达式:n! = n * (n - 1)!
# 再使用函数实现:
def factorial(n):
if n == 1:
return 1 # 递归结束
return n * factorial(n - 1) # 问题规模减1,递归调用
print(factorial(5))
# 巩固递归执行过程:
def factorial_exe(n):
print(n, '去的过程')
if n > 0:
factorial_exe(n-1)
# return factorial_exe(n-1)
print(n, '回的过程')
return n
factorial_exe(5)

源码
# 练习①
# 递归代码实现:
def winner_num(n): # n为最终要加到的数
if n <= 3:
return n
return winner_num(n - 3)
print('想要赢得比赛,必须要抢到的数是:', winner_num(4))


源码
# 斐波那契数列
# 代码实现:
def fibon(n): # 参数是表示第n个斐波那契数,函数整体表示获取斐波那契数列中第n个数字的值
if n == 0:
return 0 # fibon(0) = 0
elif n == 1 or n == 2:
return 1 # fibon(1) = fibon(2) = 1
return fibon(n-1) + fibon(n-2) # fibon(n) = fibon(n-1) + fibon(n-2) (n >= 2)
num = 5
print(f'此斐波那契数列第{num}个数是:', fibon(num))


源码
# 练习②汉诺塔游戏
# 递归代码实现:区分n=1和n>1的情况,具体实现如下:
i = 1
def hanoi(n, a, b, c):
global i
if n == 1:
print(f'第{i}步:', a, '-->', c)
i += 1
else:
hanoi(n - 1, a, c, b)
hanoi(1, a, b, c)
hanoi(n - 1, b, a, c)
num = 3 # 圆盘个数
print('把', num, '个盘子全部移到C柱子的顺序为:')
hanoi(num, 'A', 'B', 'C')

>>返回主目录
4.6 Python3 进阶 - 递归函数的更多相关文章
- Python 函数进阶-递归函数
递归函数 什么是递归函数 如果一个函数,可以自己调用自己,那么这个函数就是一个递归函数. 递归,递就是去,归就是回,递归就是一去一回的过程. 递归函数的条件 一般来说,递归需要边界条件,整个递归的结构 ...
- python3进阶之推导式之列表(list)推导式(comprehensions)
1.前言 推导式,英文名字叫comprehensions,注意与comprehension(理解)只有s字母之差.推导式又可以叫解析式,推导式可以从一种数据序列构建新的数据序列的结构体.推导式分为,列 ...
- 笔记||Python3进阶之读取和写入yaml配置文件
yaml是专门用来写配置文件的语言,简洁强大,远比JSON格式方便,yaml在python语言中有PyYAML安装包. - 首先需要pip安装:pip install pyyaml - yaml基本语 ...
- 笔记||Python3进阶之调用外部程序
像wget可以下载文件 ffmpeg可以切割.合并.转换.录制视频 free命令可以查看linux内存使用信息 python提供了库来调用外部程序.命令?> 最常见的两种方法: ①o ...
- 笔记||Python3进阶之装饰器
# 装饰器# 特征: 是用一个@开头的字符串# 装饰器通常用来装饰函数.或者类的方法# 被装饰后的函数,通常是在原有的函数基础上,会多出增加一点功能# 一般来说装饰器本身也是一个函数## def te ...
- 4.3 Python3进阶-函数嵌套和嵌套调用
>>返回主目录 源码 # 函数嵌套 def func1(): print("这是外部函数") def func2(): print("这是内部函数1" ...
- 4.10 Python3 进阶 - 迭代器 & 生成器
>>返回主目录 源码 from typing import Iterable, Iterator # 可迭代对象:字符串.列表.元组.字典.集合.range().enumerate()等 ...
- python函数进阶(函数参数、返回值、递归函数)
函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形 ...
- 学习Python--函数进阶
函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形 ...
随机推荐
- Redis 集群伸缩原理
Redis 节点分别维护自己负责的槽和对应的数据.伸缩原理:Redis 槽和对应数据在不同节点之间移动 环境:CentOS7 搭建 Redis 集群 一.集群扩容 1. 手动扩容 (1) 准备节点 9 ...
- C#如何加载嵌入到资源的非托管dll
如何加载非托管Dll 我们总会遇到需要加载非Win32的非托管dll,这里推荐一种方式就是将那些非win32的非托管dll嵌入资源的方式,在入口解压并且加载的方式,我先来看看如何实现吧,首先我们准备好 ...
- net5学习笔记---依赖注入
小王的故事 小王去上班 小王是个程序员,每个工作日他都要去上班,诸多交通工具他最喜欢的交通工具是骑电车.在骑行的过程中放空自己使他很快. 突然有一天天气预报说近期有很大的雨,小王再想骑电车去上 ...
- 2021最新Java面试题全集-20210326版
在手撕了数千道网络流传的面试题,外加十多个不眠之夜, 终于从里面精心挑选出约500道题目, 做为大家求职.跳槽前复习准备面试使用. 一:挑选题目的原则: 常考的.常被面试问到的 题目有一定的深度和难度 ...
- Linux Limit相关内容设置大全(值得收藏)
目录 一. /etc/security/limits.conf 详解 /etc/security/limits.conf 配置解析 /etc/security/limits.d/目录 二. ulimi ...
- Flutter 2.2 现已发布!
在本次 Google I/O 2021 大会 上,我们正式发布了 Flutter 2.2.Flutter 2.2 是我们最新版的开源工具包,可让开发者立足单个平台构建适合任何设备的精美应用.Flutt ...
- Java中Stream流相关介绍
什么是Stream? Stream是JDK8 API的新成员,它允许以声明性方式处理数据集合 特点 代码简洁: 函数式编程写出的代码简洁且意图明确,使用stream接口让你从此告别for循环 多核友好 ...
- 2.Python入门-计算机组成、指令和程序、标识符、变量、数据类型、对象和变量关系、运算符
一.计算机的组成 计算机由两部分组成:硬件 和 软件 硬件包含:键盘.鼠标.显示器.CPU.主板.内存.硬盘 ... -硬件是看的见摸得着的 软件包含:系统软件(windows.macOS.Linux ...
- Ubuntu编译安装TrinityCore3.3.5
系统:Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-32-generic x86_64) 1核2G Notice:内存不可过小,否则会编译失败 #安装一堆东西 4 apt- ...
- 更新索引库: $locate string 寻找包含有string的路径: $updatedb
更新索引库: $locate string 寻找包含有string的路径: $updatedb 与find不同,locate并不是实时查找.你需要更新数据库,以获得最新的文件索引信息.