python函数递归
python函数递归:
在一个函数体内调用它自身,被称为函数递归。函数递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制。
例如有如下数学题。己知有一个数列:f(0)=1,f(1)=4,f(n+2)=2*f(n+1)+f(n),其中n是大于0的整数,求f(10)的值。这道题可以使用递归来求得。下面程序将定义一个fn()函数,用于计算f(10)的值。
deffn(n):
ifn==0:
return1
elifn==1:
return4
else:
#函数中调用它自身,就是函数递归
return2*fn(n-1)+fn(n-2)
#输出fn(10)的结果
print("fn(10)的结果是:",fn(10))
在上面的fn()函数体中再次调用了fn()函数,这就是函数递归。注意在fn()函数体中调用fn的形式:
return2*fn(n-1)+fn(n-2)
对于fn(10),即等于2*fn(9)+fn(8),其中fn(9)又等于2*fn(8)+fn(7)……依此类推,最终会计算到fn(2)等于2*fn(1)+fn(0),即fn(2)是可计算的,这样递归带来的隐式循环就有结束的时候,然后一路反算回去,最后就可以得到fn(10)的值。
仔细看上面递归的过程,当一个函数不断地调用它自身时,必须在某个时刻函数的返回值是确定的,即不再调用它自身:否则,这种递归就变成了无穷递归,类似于死循环。因此,在定义递归函数时有一条最重要的规定:递归一定要向已知方向进行。
例如,如果把上面数学题改为如此。己知有一个数列:f(20)=1,f(21)=4,f(n+2)=2*f(n+1)+f(n),其中n是大于0的整数,求f(10)的值。那么f(10)的函数体应该改为如下形式:
deffn(n):
ifn==20:
return1
elifn==21:
return4
else:
#函数中调用它自身,就是函数递归
returnfn(n+2)-2*fn(n+1)
从上面的fn()函数来看,当程序要计算fn(10)的值时,fn(10)等于fn(12)-2*fn(11),而fn(11)等于fn(13)-2*fn(12)……依此类推,直到fn(19)等于fn(21)-2*fn(20),此时就可以得到fn(19)的值,然后依次反算到fn(10)的值。这就是递归的重要规则:对于求fn(10)而言,如果fn(0)和fn(1)是已知的,则应该采用fn(n)=2*fn(n-1)+fn(n-2)的形式递归,因为小的一端已知;如果fn(20)和fn(21)是已知的,则应该采用fn(n)=fn(n+2)-2*fn(n+1)的形式递归,因为大的一端已知。
递归是非常有用的,例如程序希望遍历某个路径下的所有文件,但这个路径下的文件夹的深度是未知的,那么就可以使用递归来实现这个需求。系统可定义一个函数,该函数接收一个文件路径作为参数,该函数可遍历出当前路径下的所有文件和文件路径,即在该函数的函数体中再次调用函数自身来处理该路径下的所有文件路径。
总之,只要在一个函数的函数体中调用了函数自身,就是函数递归。递归一定要向已知方向进行。
以上内容为大家介绍了Python培训之函数递归,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。
相关推荐HOT
更多>>pythonstr函数怎么使用
str函数是Python的内置函数,它将参数转换成字符串类型,即人适合阅读的形式。其语法格式为str(object)返回值:返回object的字符串形式使用示例...详情>>
2023-11-12 22:15:45python有哪些推荐使用的装饰器?
众所周知,Python语言非常强大,有很多优点。值得一提的是,它可以将所有功能打包成一个小包,非常实用有效。它还使Python语言更加灵活和有效地...详情>>
2023-11-12 21:50:16python怎么导包
python中的包即为模块,模块就是以.py类型结尾的python文件。导入模块常用的方式是importmodel_name,或者用from..importmodel_name,下面分别说...详情>>
2023-11-12 19:02:24python怎样终止线程
在python中启动和关闭线程:一、启动线程首先导入threadingimportthreading然后定义一个方法defserial_read():......然后定义线程,target指向...详情>>
2023-11-12 14:05:06