在函数内部,还可以调用其他函数,比如实现函数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递归函数相关推荐

  1. python代码入门教程_Python入门教程丨1300多行代码,让你轻松掌握基础知识点

    欢迎关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 前言 本文适合有经验的程序员尽快进入Python世界.特别地 ...

  2. python经典入门教程_Python入门经典(2K超清)

    作者 Toby,持牌照消费金融模型专家,发明金融模型算法专利,和中科院,清华大学,百度,腾讯,爱奇艺,同盾,聚信立,友盟等平台保持长期项目合作:与国内多所财经大学有模型项目.熟悉消费金融场景业务,包括 ...

  3. 超全面Python基础入门教程【十天课程】博客笔记汇总表

    目录 1.学习地址 2.下载地址[视频.源码.课件.软件] 3.详细博客笔记 Day 01 Day 02 Day 03 Day 04 Day 05 Day 06 Day 07 Day 08 Day 0 ...

  4. python爬虫入门教程--优雅的HTTP库requests(二)

    requests 实现了 HTTP 协议中绝大部分功能,它提供的功能包括 Keep-Alive.连接池.Cookie持久化.内容自动解压.HTTP代理.SSL认证等很多特性,下面这篇文章主要给大家介绍 ...

  5. 编程入门python语言是多大孩子学的-不学点编程,将来怎么给孩子辅导作业―Python新手入门教程...

    为了填满AI时代的人才缺口,编程语言教育都从娃娃抓起了!如果你还不懂Python是什么将来怎么给孩子辅导作业呢? Python新手入门教程 近期,浙江省信息技术课程改革方案出台,Python言语现已断 ...

  6. python教学视频下载-Python机器学习入门教程全套视频下载【传智播客】

    Python机器学习入门教程 初级共3天课 本套教程是机器学习的入门课程,主要介绍一些经典的传统机器学习算法,如分类算法:KNN算法,朴素贝叶斯算法,逻辑回归,决策树算法以及随机森林;回归算法:线性回 ...

  7. python基础教程是什么语言-终于懂得python中文入门教程

    Python作为一门新型的编程语言(一般常用作脚本语言)很受欢迎,毕竟相对其他的编程语言(Java ,C#等)来说比较容易入手.那么,在刚开始学习Python时有哪些疑难点需要掌握呢?以下是小编为你整 ...

  8. python菜鸟工具-终于清楚python菜鸟入门教程

    Python是一款功能强大的脚本语言,具有丰富和强大的库,重要的是,它还具有很强的可读性,易用易学,非常适合编程初学者入门.以下是小编为你整理的python菜鸟入门教程 环境配置:下载Python并安 ...

  9. python新手入门教程-Python简明入门教程

    本文实例讲述了Python简明入门教程.分享给大家供大家参考.具体如下: 一.基本概念 1.数 在Python中有4种类型的数――整数.长整数.浮点数和复数. (1)2是一个整数的例子. (2)长整数 ...

最新文章

  1. c++把数组所有元素剔除_C语言基础之数组,第一节,C语言必学知识点剖析
  2. Spring Boot 2.x整合Quartz
  3. Linux之whereis、which、find、location的区别和用法
  4. sql parser
  5. Smartform中负号提前解决方法
  6. vector的基本操作简析
  7. 使用TortoiseSVN下载SourceForge.net上的代码
  8. Windows Server 2008关闭internet explorer增强的安全配置
  9. 【项目经验】之线程基本知识
  10. php sphinx mysql_windows7使用Sphinx+PHP+MySQL详细介绍
  11. Ghost网络克隆详细步骤教程
  12. Codeforces Round #799 (Div. 4) (AK代码)
  13. oracle-j2sdk1.8,cloudera-manager – 没有包oracle-j2sdk1.7可用?
  14. 通知与服务——服务Service——服务的绑定与解绑延迟绑定服务与解绑服务
  15. 数学建模常用算法:启发式优化算法合辑(内含多种智能优化算法,使用java实现算法、详细注释、并进行结果可视化)
  16. 使用KVM虚拟机安装Linux
  17. Java 根据多边形坐标点 计算多边形面积
  18. ECMAScript 6 简明教程
  19. 技术总结-技术方案模板
  20. [蓝桥杯python] 粘木棍:有N根木棍,需要将其粘贴成M个长木棍,使得最长的和最短的的差距最小。

热门文章

  1. SpringMVC集成shrio框架
  2. PageRank三个博客mark
  3. VS2010 + OpenCL 1.1 @ Windows 7 + AMD HD6870
  4. HDU2023 求平均成绩【入门】
  5. UVA10666 The Eurocup is Here!【数学模式】
  6. Bailian2703 骑车与走路【水题】
  7. CCF NOI1053 相似度
  8. 【数论】—— 多边形数的计算(三角形数,五边形数)
  9. numpy 文件处理 —— 加载与写入
  10. Batch Normalization 反向传播(backpropagation )公式的推导