一个函数在函数体内部调用自己,这样的函数称为递归函数,递归的次数在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. 如何有效使用Project(1)——编制进度计划、保存基准

    1.前言: 软件产品的研发.升级.定制等,一般都是以项目的形式进行,此时项目进度计划以及资源使用情况就变成了项目经理关注的重点.如何让项目计划有效可控,及时暴露问题?如何查看资源的负荷情况,看资源分配 ...

  2. XJCO1711 Procedural Programming

    University of Leeds School of ComputingProcedural Programming XJCO1711Semester 1, 2019-2020Coursewor ...

  3. 让一个项目同时提交到码云和GitHub两个仓库

    在项目目录里找到.git文件夹然后找到config文件. 打开这个文件后找到下面的代码 [remote "origin"] url = git提交地址 fetch = +refs/ ...

  4. [ML] Tensorflow.js + Image segmentPerson

    <!DOCTYPE html> <html> <head> <title>Parcel Sandbox</title> <meta c ...

  5. 小程序支付及H5支付前端代码小结

    小程序支付和H5支付前端都不需要引入其他的js , 只需要后台将相关的参数 ( timeStamp: '', nonceStr: '', package: '', signType: 'MD5', p ...

  6. 2019.12.09 Random 随机数类

    //导包import java.util.Random;class Demo02 { public static void main(String[] args) { //创建Random对象 Ran ...

  7. Python 04 Geany的安装和配置

    安装原文:https://www.cnblogs.com/wongyi/p/7832567.html 配置原文:https://jingyan.baidu.com/album/154b46311ed9 ...

  8. 开源项目 05 Dapper

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. linux命令之------Chown命令

    Chown命令 1) 作用:将指定文件的拥有者改为指定的用户或组. 2) -c:显示更改的部分的信息. 3)-f:忽略错误信息. 4)-h:修复符号链接. 5)-v:显示详细的处理信息. 6)-R:处 ...

  10. 1、zookeeper入门

    一.什么是Zookeeper Zookeeper是Google的Chubby一个开源的实现,是一个开源的,为分布式提供协调服务的Apache项目; 它包含一个简单的原语集,分布式应用程序可以基于它实现 ...