一、解释

递归:在调用一个函数的过程中,直接或间接地调用了函数本身这个就叫递归

注:Python在递归中没有像别的语言对递归进行优化,所以他的每一次调用都会基于上一次的调用进行,并且他设置了最大的递归数量防止递归外溢

二、实例

直接调用自己:

def func():

print('from func')

func()

func()复制代码

间接调用自己

def foo():

print('from foo')

bar()

def bar():

print('from bar')

foo()

foo()复制代码复制代码

递归的实现:

def age(n):

if n == 1:

return 18

return age(n-1)+2

print(age(5))

age(5)=age(4)+2 第一次进入

age(4)=age(3)+2 第二次进入

age(3)=age(2)+2 第三次进入

age(2)=age(1)+2 第四次进入

age(1)=18 第五次进入,最后判断终止条件

age(n)=age(n-1)+2 #n>1 递归终止条件

age(1)=18 #n=1 等于终止条件

复制代码三、递归的回溯与递推

递推:像上边递归实现所拆解,递归每一次都是基于上一次进行下一次的执行,这叫递推

回溯:则是在遇到终止条件,则从最后往回返一级一级的把值返回来,这叫回溯

复制代码

实例

l =[1, 2, [3, [4, 5, 6, [7, 8, [9, 10, [11, 12, 13, [14, 15,[16,[17,]],19]]]]]]]

def search(l):

for item in l:

if type(item) is list:

search(item)

else:

print(item)

search(l)

递归算法

1、递归的定义 递归就是子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题和解决问题的基本方法。 递归常与分治思想同时使用,能产生许多高校的算法。递归常用来解决结构相似的问题。所谓结构相似,是指构成原问题的子问题与原问题在结构上相似,可以用类似的方法解决。具体地,整个问题的解决,可以分为两部分:第一部分是一些特殊情况,有直接的解法;第二部分与原问题相似,但比原问题的规模小,并且依赖第一部分的结果。。实际上,递归是把一个不能或不好解决的大问题转化成一个或几个小问题,再把这些小问题进一步分解成更小的小问题,直至每个小问题都可以直接解决。因此,递归有两个基本要素: (1) 边界条件:确定递归到何时终止,也称为递归出口。 (2) 递归模式:大问题是如何分解为小问题的,也称为递归体。 递归函数只有具备了这两个要素,才能在有限次计算后得出结果。 2、递归算法实例

2.1求一个整数n的阶乘 阶乘的定义如下图:

图1

根据阶乘的递归定义,很容易就能写出求阶乘的递归算法。

def factorial(n) : if n == 1 :

return 1 #递归结束

return n * factorial(n - 1) #问题规模减1,递归调用123452.2汉诺塔 汉诺塔问题是递归函数的经典应用,它来自一个古老传说:在世界刚被创建的时候有一座钻石宝塔A,其上有64个金蝶。所有碟子按从大到小的次序从塔底堆放至塔顶。紧挨着这座塔有另外两个钻石宝塔B和C。从世界创始之日起,波罗门的牧师就一直在试图把塔A上的碟子移动到C上去,其间借助于塔B的帮助。每次只能移动一个碟子,任何时候都不能把一个碟子放在比它小的碟子上面。当牧师们完成这个任务时,世界末日也就到了。 对于汉诺塔问题的求解,可以通过以下3步实现: (1)将塔A上的n -1个碟子借助C塔先移动到B塔上; (2)把塔A上剩下的一个碟子移动到塔C上; (3)将n - 1个碟子从B塔借助塔A移动到塔C上。 很显然,这是一个递归求解的过程,假设碟子数n=3时,汉诺塔问题的求解过程如下图所示:

图2

汉诺塔的递归算法(Python实现):

def Hanoi(n, A, B, C) : if (n == 1) :

move(A, c) #表示只有一个碟子时,直接从A塔移动到C塔

else :

Hanoi(n - 1, A, C, B) #将剩下的A塔上的n-1借助C塔移动到B塔

move(A, C) #将A上最后一个直接移动到C塔上

Hanoi(n - 1, B, A, C) #将B塔上的n-1个碟子借助A塔移动到C塔

12345678递归函数的运行轨迹 借助汉诺塔这个实例,来讲解一下递归函数的运行轨迹。在递归函数中,调用函数和被调用函数都是同一个函数,需要注意的是函数的调用层次,如果把调用递归函数的主函数称为第0层,进入函数后,首次递归调用自身称为第1层调用;从第i层递归调用自身称为第i+1层。反之退出i+1层调用应该返回第i层。下图是n=3时汉诺塔算法的运行轨迹,有向弧上的数字表示递归调用和返回的执行顺序。

图3

汉诺塔的递归算法代码实现:

coding=utf-8

i = 1def move(n, mfrom, mto) : global i print "第%d步:将%d号盘子从%s -> %s" %(i, n, mfrom, mto) i += 1

def hanoi(n, A, B, C) : if n == 1 :

move(1, A, C)

else :

hanoi(n - 1, A, C, B)

move(n, A, C)

hanoi(n - 1, B, A, C)

程序入口

try : n = int(raw_input("please input a integer :")) print "移动步骤如下:" hanoi(n, 'A', 'B', 'C')except ValueError: print "please input a integer n(n > 0)!" 123456789101112131415161718192021222324执行结果: 结果

2.3 斐波拉契数列 斐波拉契数列,是这样的一个数列:0、1、1、2、3、5、8、13、21、……。 斐波拉契数列的核心思想是: 从第三项起,每一项都等于前两项的和,即F(N) = F(N - 1) + F(N - 2) (N >= 2) 并且规定F(0) = 0,F(1) = 1

要求:利用递归算法获得指定项的斐波拉契数列。

!/usr/bin/python

coding=utf-8

def fib_list(n) : if n == 1 or n == 2 :

return 1

else :

m = fib_list(n - 1) + fib_list(n - 2)

return m

print "请输入要打印的斐波拉契数列项数n的值*"try : n = int(raw_input("enter:"))except ValueError : print "请输入一个整数!" exit()list2 = [0]tmp = 1while(tmp <= n): list2.append(fib_list(tmp)) tmp += 1print list2

python 怎么表示阶乘_python表示阶乘相关推荐

  1. python一个数的阶乘_python整数阶乘计算

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 问题本身很简单,主要是通过这个小问题来演示python的一些用法,例如测试代码运 ...

  2. python怎么算阶乘_python计算阶乘

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 问题本身很简单,主要是通过这个小问题来演示python的一些用法,例如测试代码运 ...

  3. python 与或非_Python的阶乘求和

    题目描述: 获得用户输入的整数n,输出 1!+2!+-+n!的值. 如果输入数值为0.负数.非数字或非整数,输出提示信息:输入有误,请输入正整数. 方法一: #factTest1 def main() ...

  4. python怎么算阶乘_Python 计算阶乘的算法

    希望你的坚持是因为热爱,而不是不甘 by:缘分落地 阶乘在高中的数学排列组合曾经出现过,相信各位都不陌生.举个栗子: N!= N * (N-1) * (N-2)......1 带入数字形象的看一遍,我 ...

  5. python求50的阶乘_python中求阶乘

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我如何去计算python中的一个整数的阶乘?... 写一个猜数字的游戏,预先设定 ...

  6. python怎么算阶乘_python专家写阶乘 ()用python计算阶乘

    请编写一个程序实现分享n的阶乘(即n.),并打印输出结果.要分享包括两个函def little_than_50(x): if x 语言很多时候是假的,一起经历过的事情才是真的. 这个用python写的 ...

  7. python阶乘的代码_python编码阶乘

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 需求:阶乘:也是数学里的一种术语: 阶乘指从1乘以2乘以3乘以4一直乘到所要求的 ...

  8. python求50的阶乘_python中的阶乘

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我如何去计算python中的一个整数的阶乘?... 问题描述 阶乘是我们在很多的 ...

  9. python实现6的阶乘_python设计一个阶乘函数,并使用该函数求出6的阶乘。(怎么用python求阶乘的和教程)...

    python设计一个阶乘函数,并使用该函数求出6的阶乘. # 遍 def f1(n): r = 1 while n > 1: r *= n n -= 1 return r # 递 def f2( ...

  10. python递归方法计算阶乘_python递归求阶乘的方法

    python递归求阶乘的方法 阶乘:例如 5! 指的是"5的阶乘",即 5! = 1*2*3*4*5. "递归"就是对自身进行调用的函数.def f(x): i ...

最新文章

  1. 2021全国高校计算机能力挑战赛(初赛)Java试题二
  2. 中小企业远程存储服务之利弊
  3. Spring整合Disruptor3
  4. linux存储--共享内存机制shm(十四)
  5. 在Ubuntu中永久添加DNS
  6. 各版本arm-gcc区别与安装
  7. 微众WeCross 跨链平台(5)“UBI通用区块链接口”设计
  8. JAVA-单例模式的几种实现方式
  9. mysql分页查询limit_MySQL查询语句(where,group by,having,order by,limit)
  10. 关于Python Profilers性能分析器
  11. 传送,条件加速 Learn Unreal Engine (with C++)
  12. 在线文档显示组件 FlexPaper
  13. linux中dns超时时间,Linux DNS timeout, attempts.---DNS超时,重试的配置
  14. JavaScript-获取浏览器信息
  15. python建立数据库连接时出错_python – 尝试连接到localhost上的数据库时出现pyodbc连接错误...
  16. 集体智慧编程4-优化
  17. 一维码Code 128简介及其解码实现 zxing-cpp
  18. 把文字图片转换成文本文字
  19. 生成离线报告-java将白色背景透明和裁减掉白色背景部分
  20. 邱姓女孩五行缺水取名

热门文章

  1. Java单元测试-覆盖率分析报告自动生成
  2. .NET 客户IP地址捕捉
  3. Codeforces Round #359 (Div. 2) C. Robbers' watch DFS
  4. 【转】android 完全退出应用程序
  5. (转)悟透javascript
  6. FLEX 与 VS 2008 利用 FluorineFx 开发快速配置演示
  7. 【工具推荐】光影魔术手
  8. 【python简洁之道】-----2.导入模块顺序(规范/风格)
  9. 模板题——贪心(1)
  10. python读取dat文件并保存为Excel格式