知行编程网知行编程网  2022-11-26 22:00 知行编程网 隐藏边栏  5 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于什么是python函数递归的相关知识,希望可以帮到处于编程学习途中的小伙伴

什么是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学习网,大量的免费
,欢迎在线学习!

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享