Artikel untuk membantu anda memahami fungsi rekursif Python

Lepaskan: 2023-07-25 16:43:25
ke hadapan
1376 orang telah melayarinya

1. Apakah fungsi rekursif?

Dalam satu fungsi, anda boleh memanggil fungsi lain. Fungsi adalah rekursif jika ia memanggil dirinya secara dalaman. . .


Kira faktorial n! = 1 x 2 x 3 x … x n,

boleh diwakili oleh fakta fungsi(n).

  • fact(n) = n! = 1 x 2 x 3 x … x (n-1) x n = (n-1)! x n = fact(n-1) x n
    Salin selepas log masuk

    fact(n)可以表示为n x fact(n-1),只有n=1时需要特殊处理。
    Salin selepas log masuk
    Jadi, fakta(n) ditulis secara rekursif:

  • def fact(n):    if n == 1:        return 1    return n * fact(n - 1)
    Salin selepas log masuk

    如果计算fact(6),可以根据函数定义看到计算过程如下:

    def fac(n):    if n==1:        return 1    else:        res=n*fac(n-1)        return  res
    print(fac(6))
    Salin selepas log masuk

    运行结果:

    Artikel untuk membantu anda memahami fungsi rekursif Python

    1. 斐波拉契级数

    有这样一个数列:1,1,2,3,5,8,13,21,34…。其第一元素和第二个元素等于 1,其他元素等于其前面两个元素的和。

    例:

    def fab(n):  # 定义斐波拉契级数    if n in [1, 2]:  # 如果n=1或者2      return 1    return fab(n - 1) + fab(n - 2)  # n>2
    
    print(fab(1))  # 斐波拉契级数的第一个元素
    print(fab(2))  # 斐波拉契级数的第二个元素
    print(fab(8))  # 斐波拉契级数的第8个元素print(fab(13))  # 斐波拉契级数的第9个元素
    Salin selepas log masuk

    运行结果:

    Artikel untuk membantu anda memahami fungsi rekursif Python

    1. 递归函数的优点

    定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。

    递归需要注意递归的深度。由于递归会产生多次函数调用,而函数调用会消耗代码的栈空间,如果递归的深度太大,会导致栈溢出。以上面的阶乘为例,如果计算 100000 的阶乘,在一般机器上都会出现栈溢出的问题。

    print(fac(10000))
    Salin selepas log masuk

    如下所示:

    Artikel untuk membantu anda memahami fungsi rekursif Python


    4. Ringkasan

    Artikel ini berdasarkan asas Python. Jurubahasa standard Python tidak dioptimumkan untuk rekursi ekor, dan sebarang fungsi rekursif akan mempunyai limpahan timbunan. Artikel ini memperkenalkan kebaikan dan keburukan menggunakan fungsi rekursif Kelebihannya ialah logiknya mudah dan jelas, tetapi kelemahannya ialah panggilan yang berlebihan boleh menyebabkan limpahan timbunan.

Atas ialah kandungan terperinci Artikel untuk membantu anda memahami fungsi rekursif Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:Go语言进阶学习
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan