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 种 组合形 ...
随机推荐
- Spring的安装
Spring的安装 Spring框架包 spring-framework-4.3.6RELEASE-dist.zip http://repo.spring.io/simple/libs-release ...
- Pulsar部署和实践(一)
前言 本地Docker部署Pulsar消息代理实现消息发布和消息订阅 介绍 相关概念,后面有时间再花时间整理下. 实践步骤 1.使用dokcer本地部署pulsar docker run -it \ ...
- 关于MySQL参数,这些你要知道
前言: 在前面一些文章中,经常能看到介绍某某参数的作用,可能有些小伙伴仍搞不清楚 MySQL 参数是啥.本篇文章我们来聊聊 MySQL 参数,学习下如何管理维护 MySQL 参数. 1.MySQL参数 ...
- Java集合详解(三):HashMap原理解析
概述 本文是基于jdk8_271版本进行分析的. HashMap是Map集合中使用最多的.底层是基于数组+链表实现的,jdk8开始底层是基于数组+链表/红黑树实现的.HashMap也会动态扩容,与Ar ...
- 33.2.NIO
4.1概述[理解] BIO Blocking IO,阻塞型IO NIO No Blocking IO,非阻塞型IO 阻塞IO的弊端 在等待的过程中,什么事也做不了 非阻塞IO的好处 不需要一直等待,当 ...
- Samba服务配置及配置文件说明
前言 1.配置Samba服务为什么要关闭防火墙(firewalld)和Selinux? 在linux操作系统中默认开启了防火墙,Selinux也处于启动状态,一般状态为enforing:所以,在我们搭 ...
- linux进阶之SVN集中式版本控制系统篇
代码上线--版本控制系统 SVN 集中式版本控制系统 git 分布式版本控制系统 SVN是subversion的缩写,即版本控制系统,是一个开放 ...
- Centos 7.4搭建es7.12.0+Skywalking7.8.5
Skywalking整体架构图和分布式追踪系统原理:https://blog.csdn.net/weixin_39866487/article/details/111581322 软件包版本1.ela ...
- 灵动微电子ARM Cortex M0 MM32F0010 UART1和UART2中断接收数据
灵动微电子ARM Cortex M0 MM32F0010 UART1和UART2中断接收数据 目录: 1.MM32F0010UART简介 2.MM32F0010UART特性 3.MM32F0010使用 ...
- .Net Redis实战——实现文章投票并排序
本系列文章为学习Redis实战一书记录的随笔. 软件和环境版本:Redis:5.0.7 .Net 5.0 文中不会对Redis基础概念做过多介绍. Redis数据类型和命令可在菜鸟教程学习:http ...