什么是python函数递归

您所在的位置:网站首页 python函数式编程 什么是python函数递归

什么是python函数递归

2022-11-29 01:21| 来源: 网络整理| 查看: 265

什么是python函数递归

在函数体内调用自身称为函数递归。函数递归涉及一个隐式循环,该循环在没有循环控制的情况下重复一段代码。

例如,有以下数学问题。已知有一个序列:f(0) = 1, f(1) = 4, f(n + 2) = 2*f(n+ 1) +f(n),其中n是大于的整数0,求f(10)值。这个问题可以用递归来解决。下面的程序将定义一个 fn() 函数来计算 f(10) 的值。

def fn(n) : if n == 0 : return 1 elif n == 1 : return 4 else : # 函数中调用它自身,就是函数递归 return 2 * fn(n - 1) + fn(n - 2) # 输出fn(10)的结果 print("fn(10)的结果是:", fn(10))

fn() 函数在上面的 fn() 函数体中再次被调用,也就是函数递归。注意 fn() 函数体中对 fn 的调用形式:

return 2 * 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) 的函数体应该改成如下形式:

def fn(n) : if n == 20 : return 1 elif n == 21 : return 4 else : # 函数中调用它自身,就是函数递归 return fn(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学习网,大量的免费 ,欢迎在线学习!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3