一个函数在函数体内部调用自己,这样的函数称为递归函数,递归的次数在python是有限制的,默认递归次数是997次,超过997次会报错:RecursionError.

一.递归函数案例

案例一:计算数字N的阶乘(举个栗子:9的阶乘 = 9*8*7*6*5*4*3*2*1)

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:何以解忧
@Blog(个人博客地址): shuopython.com
@WeChat Official Account(微信公众号):猿说python
@Github:www.github.com @File:python_digui.py
@Time:2019/10/30 21:25 @Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
""" # 使用递归函数实现阶乘
# 举个例子,计算9的阶乘:9! = 9*8*7*6*5*4*3*2*1 = 362880
def func(n):
if n==1: # 结束条件:当 n == 1 结束递归调用
return 1
else:
return n*func(n-1)
print(func(9)) # 使用for循环计算阶乘
result= 1
# i 取值: 9 8 7 6 5 4 3 2 1 不包括0
for i in range(9,0,-1):
result = result * i
print(result)

输出结果:

362880
362880

可能对于案例一,你会觉得好像所谓的递归也没什么卵用的样子,我用for循环也能实现,那么我们继续往下看案例二或者案例三。

案例二:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

def heigthM(num, heigth, sum):
sum += heigth
heigth /= 2 #第一次返回高度50
print(heigth, sum) # 查看每次返回的高度和经过多少米
if num == 1:
return heigth ,sum
else:
sum += heigth # 返回到最高点时,经过多少米需要加上高度
return heigthM(num - 1, heigth, sum)
print("第10次的反弹高度和累计经历的米数分别是:",heigthM(10, 100, 0)) #num是次数,heigth是高度,sum是经过多少米

输出结果:

3.125 287.5
1.5625 293.75
0.78125 296.875
0.390625 298.4375
0.1953125 299.21875
0.09765625 299.609375
第10次的反弹高度和累计经历的米数分别是: (0.09765625, 299.609375)

小窍门: 函数可以同时返回多个值,以元组的形式返回!!

案例三:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少?

def monkey(n):
if n == 1:
return 1
else:
return (monkey(n - 1) + 1) * 2
print(monkey(10))

计算结果:1534

二.递归函数使用需要注意的问题

1.一定要有结束条件

2.默认递归次数是997次,超过997次会报错:RecursionError.

猜你喜欢:

1.python函数声明和调用

2.python不定长参数*argc,**kargcs

3.python return逻辑判断表达式

4.python列表推导式

5.python字典推导式

6.python匿名函数

转载请注明:猿说Python » python递归函数

技术交流、商务合作请直接联系博主
扫码或搜索:猿说python
猿说python
微信公众号 扫一扫关注

python递归函数(10)的更多相关文章

  1. 十. Python基础(10)--装饰器

    十. Python基础(10)--装饰器 1 ● 装饰器 A decorator is a function that take a function as an argument and retur ...

  2. Python 递归函数 详解

    Python 递归函数 详解   在函数内调用当前函数本身的函数就是递归函数   下面是一个递归函数的实例: 第一次接触递归函数的人,都会被它调用本身而搞得晕头转向,而且看上面的函数调用,得到的结果会 ...

  3. 快速入门:十分钟学会PythonTutorial - Learn Python in 10 minutes

    This tutorial is available as a short ebook. The e-book features extra content from follow-up posts ...

  4. 『Python基础-10』字典

    # 『Python基础-10』字典 目录: 1.字典基本概念 2.字典键(key)的特性 3.字典的创建 4-7.字典的增删改查 8.遍历字典 1. 字典的基本概念 字典一种key - value 的 ...

  5. python进阶10 MySQL补充 编码、别名、视图、数据库修改

    python进阶10 MySQL补充    编码.别名.视图.数据库修改 一.编码问题 #MySQL级别编码 #修改位置: /etc/mysql/mysql.conf.d/mysqld.cnf def ...

  6. python学习10—迭代器、三元表达式与生成器

    python学习10—迭代器.三元表达式与生成器 1. 迭代器协议 定义:对象必须提供一个next方法,执行该方法或者返回迭代中的下一项,或者返回一个StopIteration异常,以终止迭代(只能往 ...

  7. Python 3.10 版本采纳了首个 PEP,中文翻译即将推出

    现在距离 Python 3.9.0 的最终版本还有 3 个月,官方公布的时间线是: 3.9.0 beta 4: Monday, 2020-06-29 3.9.0 beta 5: Monday, 202 ...

  8. Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性

    译者前言:相信凡是用过 zip() 内置函数的人,都会赞同它很有用,但是,它的最大问题是可能会产生出非预期的结果.PEP-618 提出给它增加一个参数,可以有效地解决大家的痛点. 这是 Python ...

  9. Python 3.10 明年发布,看看都有哪些新特性?

    我们目前生活在Python 3.8的稳定时代,上周发布了Python的最新稳定版本3.8.4.Python 3.9已经处于其开发的beta阶段,并且2020年7月3日预发布了beta版本(3.9.0b ...

随机推荐

  1. 【游记】CSP2019 垫底记

    考试时候的我: Day 1 做完 \(T1\) 和 \(T2\),还有 \(2.5 h\),我想阿克 \(Day1\).(\(T3\):不,你不想) 不过一会就想出来给每个点 dfs 贪心选一个点,然 ...

  2. 10-Flutter移动电商实战-使用FlutterSwiper制作轮播效果

    1.引入flutter_swiper插件 flutter最强大的siwiper, 多种布局方式,无限轮播,Android和IOS双端适配. 好牛X得介绍,一般敢用“最”的一般都是神级大神,看到这个介绍 ...

  3. lxml_time_代理

    import requests from pyquery import PyQuery as pq import json import jsonpath from lxml import etree ...

  4. 17-ESP8266 SDK开发基础入门篇--TCP服务器 RTOS版,小试牛刀

    https://www.cnblogs.com/yangfengwu/p/11105466.html 现在开始写... lwip即可以用socket 的API  也可以用 netconn  的API实 ...

  5. 过拟合产生的原因(Root of Overfitting)

    之前在<过拟合和欠拟合(Over fitting & Under fitting)>一文中简要地介绍了过拟合现象,现在来详细地分析一下过拟合产生的原因以及相应的解决办法. 过拟合产 ...

  6. 【loj2339】【WC2018】通道

    题目 三棵带边权的树,求 \[ dis1(u,v) + dis2(u,v) + dis3(u,v) \] 的最大值 \(1 \le n \le 10^5\) 题解 对\(T_1\)做边分治,把分治边的 ...

  7. CSP内容安全策略总结及如何抵御 XSS 攻击

    跨域脚本攻击 XSS 是最常见.危害最大的网页安全漏洞.为了防止它们,要采取很多编程措施,非常麻烦.很多人提出,能不能根本上解决问题,浏览器自动禁止外部注入恶意脚本?这就是"网页安全政策&q ...

  8. mac 下的 tree 命令 终端展示你的目录树结构

    相信很多使用过Linux的用户都用过tree命令,它可以像windows的文件管理器一样清楚明了的显示目录结构.mac 下使用 brew包管理工具安装 tree 前提:安装了homebrew(安装指令 ...

  9. [内网渗透] MSF路由转发/网络代理

    这里只做记录,不做详解 0x01 路由转发 已经拿到一台公网服务器: 1.1 方法1 进到meterpreter的会话: route #查看路由信息 background退出当前会话,通过会话2,转发 ...

  10. 服务器收不到支付宝notify_url异步回调请求的问题排查

    小背景 最近在调整支付宝支付的功能时发现,不能够正常接收支付宝付款成功之后的回调通知了,从代码到配置最后到服务器配置都排查了一遍,最终发现问题原因竟然是因为我们的回调地址notify_url是http ...