python递归函数入门教程_Python递归函数
在函数内部,还可以调用其他函数,比如实现函数data_of_square的时候,它接收边长一个参数,同时返回正方形的周长和面积,而求周长和求面积是完全独立的逻辑,可以定义成两个新的函数,然后在data_of_square函数中再调用这两个函数,得到结果并返回。
def square_area(side):
return side * side
def square_perimeter(side):
return 4 * side
def data_of_square(side):
C = square_perimeter(side)
S = square_area(side)
return C, S
在函数内部调用其他函数,是非常常见的,通过合理拆分逻辑,可以降低程序的复杂度。如果在一个函数内部调用其自身,这个函数就是递归函数。
举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n,用函数 fact(n)表示,可以看出:
fact(n) = n! = 1 * 2 * 3 * ... * (n-1) * n = (n-1)! * n = fact(n-1) * n
所以,fact(n)可以表示为 n * fact(n-1),只有n=1时需要特殊处理。
于是,fact(n)用递归的方式写出来就是:
def fact(n):
if n==1:
return 1
return n * fact(n - 1)
这个fact(n)就是递归函数,可以试试计算得到的结果。
fact(1) # ==> 1
fact(5) # ==> 120
我们可以拆解fact(5)计算的详细逻辑
===> fact(5)
===> 5 * fact(4)
===> 5 * (4 * fact(3))
===> 5 * (4 * (3 * fact(2)))
===> 5 * (4 * (3 * (2 * fact(1))))
===> 5 * (4 * (3 * (2 * 1)))
===> 5 * (4 * (3 * 2))
===> 5 * (4 * 6)
===> 5 * 24
===> 120
递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。
使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。可以试试计算 fact(10000)。
Traceback (most recent call last):
RecursionError: maximum recursion depth exceeded in comparison
python递归函数入门教程_Python递归函数相关推荐
- python代码入门教程_Python入门教程丨1300多行代码,让你轻松掌握基础知识点
欢迎关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 前言 本文适合有经验的程序员尽快进入Python世界.特别地 ...
- python经典入门教程_Python入门经典(2K超清)
作者 Toby,持牌照消费金融模型专家,发明金融模型算法专利,和中科院,清华大学,百度,腾讯,爱奇艺,同盾,聚信立,友盟等平台保持长期项目合作:与国内多所财经大学有模型项目.熟悉消费金融场景业务,包括 ...
- 超全面Python基础入门教程【十天课程】博客笔记汇总表
目录 1.学习地址 2.下载地址[视频.源码.课件.软件] 3.详细博客笔记 Day 01 Day 02 Day 03 Day 04 Day 05 Day 06 Day 07 Day 08 Day 0 ...
- python爬虫入门教程--优雅的HTTP库requests(二)
requests 实现了 HTTP 协议中绝大部分功能,它提供的功能包括 Keep-Alive.连接池.Cookie持久化.内容自动解压.HTTP代理.SSL认证等很多特性,下面这篇文章主要给大家介绍 ...
- 编程入门python语言是多大孩子学的-不学点编程,将来怎么给孩子辅导作业―Python新手入门教程...
为了填满AI时代的人才缺口,编程语言教育都从娃娃抓起了!如果你还不懂Python是什么将来怎么给孩子辅导作业呢? Python新手入门教程 近期,浙江省信息技术课程改革方案出台,Python言语现已断 ...
- python教学视频下载-Python机器学习入门教程全套视频下载【传智播客】
Python机器学习入门教程 初级共3天课 本套教程是机器学习的入门课程,主要介绍一些经典的传统机器学习算法,如分类算法:KNN算法,朴素贝叶斯算法,逻辑回归,决策树算法以及随机森林;回归算法:线性回 ...
- python基础教程是什么语言-终于懂得python中文入门教程
Python作为一门新型的编程语言(一般常用作脚本语言)很受欢迎,毕竟相对其他的编程语言(Java ,C#等)来说比较容易入手.那么,在刚开始学习Python时有哪些疑难点需要掌握呢?以下是小编为你整 ...
- python菜鸟工具-终于清楚python菜鸟入门教程
Python是一款功能强大的脚本语言,具有丰富和强大的库,重要的是,它还具有很强的可读性,易用易学,非常适合编程初学者入门.以下是小编为你整理的python菜鸟入门教程 环境配置:下载Python并安 ...
- python新手入门教程-Python简明入门教程
本文实例讲述了Python简明入门教程.分享给大家供大家参考.具体如下: 一.基本概念 1.数 在Python中有4种类型的数――整数.长整数.浮点数和复数. (1)2是一个整数的例子. (2)长整数 ...
最新文章
- c++把数组所有元素剔除_C语言基础之数组,第一节,C语言必学知识点剖析
- Spring Boot 2.x整合Quartz
- Linux之whereis、which、find、location的区别和用法
- sql parser
- Smartform中负号提前解决方法
- vector的基本操作简析
- 使用TortoiseSVN下载SourceForge.net上的代码
- Windows Server 2008关闭internet explorer增强的安全配置
- 【项目经验】之线程基本知识
- php sphinx mysql_windows7使用Sphinx+PHP+MySQL详细介绍
- Ghost网络克隆详细步骤教程
- Codeforces Round #799 (Div. 4) (AK代码)
- oracle-j2sdk1.8,cloudera-manager – 没有包oracle-j2sdk1.7可用?
- 通知与服务——服务Service——服务的绑定与解绑延迟绑定服务与解绑服务
- 数学建模常用算法:启发式优化算法合辑(内含多种智能优化算法,使用java实现算法、详细注释、并进行结果可视化)
- 使用KVM虚拟机安装Linux
- Java 根据多边形坐标点 计算多边形面积
- ECMAScript 6 简明教程
- 技术总结-技术方案模板
- [蓝桥杯python] 粘木棍:有N根木棍,需要将其粘贴成M个长木棍,使得最长的和最短的的差距最小。