一个函数在函数体内部调用自己,这样的函数称为递归函数,递归的次数在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. springboot使用jdbcTemplate案例

    1 创建实体类 public class Student { private Integer stuid; private String stuname; public Integer getStui ...

  3. BZOJ 4771: 七彩树 可持久化线段树+树链的并

    这个思路挺有意思的 ~ 利用树链的并来保证每个颜色只贡献一次,然后用可持久化线段树维护 code: #include <set> #include <cstdio> #incl ...

  4. 【JZOJ6228】【20190621】ni

    题目 $ n $ 个数 $ E_i $ ,$ F(i) $ 表示对1-i的数任意排列 $ p $ ,初始 $ X=0 $ ,依次执行: \(X \lt E_{p_j} \ , \ X++\) $X \ ...

  5. 计蒜客 39279.Swap-打表找规律 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest L.) 2019ICPC西安邀请赛现场赛重现赛

    Swap There is a sequence of numbers of length nn, and each number in the sequence is different. Ther ...

  6. Go-Json操作

    /** * @Author: jadeshu * @Description: * @File: main * @Version: 1.0.0 * @Date: 2019/11/7 2:33 */ pa ...

  7. 「PKUSC2018」星际穿越

    传送门 Solution  倍增 Code  #include <bits/stdc++.h> #define reg register #define ll long long usin ...

  8. java excel给单元格增加批注(包含SXSSF)

    package javatest; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi ...

  9. 扩展自easyui的combo组件的下拉多选控件

    首先上效果图 代码片段: 有需要的朋友微信联系我. 如果这篇文章对您有帮助,您可以打赏我 技术交流QQ群:15129679    

  10. Nginx 必须知道哪些事?

    Nginx(发音同engine x)是一个异步框架的 Web 服务器,也可以用作反向代理,负载平衡器 和 HTTP 缓存.该软件由 Igor Sysoev 创建,并于2004年首次公开发布.同名公司成 ...