博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python递归函数
阅读量:4630 次
发布时间:2019-06-09

本文共 878 字,大约阅读时间需要 2 分钟。

  在函数内部,可以调用其他函数。如果一个函数在内部调用本身,这个函数就是递归函数。比如计算阶乘n! = 1 x 2 x 3 x ... x n,用函数func(n)表示,于是,func(n)用递归的方式写出来就是:

def func(n):    if n == 1:        return 1    return func(n-1)*nprint(func(5))

具体过程:

次数 n func()
1 5 func(4)*5 120
2 4 func(3)*4 24
3 3 func(2)*3 6
4 2 func(1)*2 2
5 1 return 1 1

  递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。但是需要注意的是防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。

递归例子:

1 def move(n, a, b, c):2     if n == 1:3         print('move', a, '-->', c)4     else:5         move(n-1, a, c, b)6         move(1, a, b, c)7         move(n-1, b, a, c)8 9 move(4, 'A', 'B', 'C')
汉诺塔
1 def fbi(n):2     if n == 1:3         return 14     elif n == 0:5         return 06     elif n >= 2:7         return fbi(n-1)+fbi(n-2)8 print(fbi(8))
斐波那契数列

 

转载于:https://www.cnblogs.com/lizhihoublog/p/10142907.html

你可能感兴趣的文章
Catel(翻译)-为什么选择Catel
查看>>
angular轮播图
查看>>
指针小白:修改*p与p会对相应的地址的变量产生什么影响?各个变量指针的长度为多少?...
查看>>
文本相关CSS
查看>>
全新的开始
查看>>
leaflet地图框架
查看>>
mybatis的一些基础问题
查看>>
封装、继承、多态
查看>>
visual webgui theme designer
查看>>
【制作镜像】BCEC制作镜像
查看>>
Hadoop学习笔记之三 数据流向
查看>>
程序员眼中的英文单词是这样的
查看>>
Leetcode: Sort List
查看>>
gitlab搭建
查看>>
python_day10
查看>>
ios中的自动释放池
查看>>
Android Layer List 使用实现实例
查看>>
CSipSimple 工程分析 <1>
查看>>
关于DWG文件转换成PDF
查看>>
Jerry眼中的SAP客户数据模型
查看>>