Rumah > pembangunan bahagian belakang > Tutorial Python > Demystifying Python Recursion

Demystifying Python Recursion

Lisa Kudrow
Lepaskan: 2025-03-05 09:57:11
asal
560 orang telah melayarinya

Demystifying Python Recursion

Dalam pengaturcaraan Python, banyak tugas kompleks boleh dipecah menjadi subtask yang lebih mudah. Rekursi adalah cara yang kuat untuk melaksanakan penguraian ini, menjadikan kod lebih ringkas dan mudah dikekalkan. Tutorial ini akan meliputi konsep rekursi, kelebihan, dan cara menggunakannya di Python.

Apa itu rekursi?

rekursi adalah cara untuk menyelesaikan masalah dengan menyelesaikan masalah yang lebih kecil masalah. Pendekatan ini boleh digunakan untuk banyak cabaran dalam pengaturcaraan.

kelebihan menggunakan rekursi

Beberapa kelebihan menggunakan rekursi termasuk:

    Memudahkan penulisan kod dan memudahkan debug.
  • Kurangkan masa larian algoritma (sebagai fungsi panjang input).
  • lebih berkesan apabila menyelesaikan masalah yang sangat kompleks (terutama yang berdasarkan struktur pokok).
pemula fungsi rekursif python

rekursi mungkin kelihatan rumit, tetapi tidak. Ringkasnya, katakan anda mempunyai dua segi empat tepat A dan B. Tambahkannya bersama -sama untuk membentuk segi empat tepat C. Ini adalah proses rekursif dalam dirinya sendiri. Kami menggunakan contoh yang lebih kecil dari segi empat tepat untuk menentukan diri kita, jika kita mahu menulis fungsi python, nampaknya ini:

def rectangle(a, b):
    return a + b
Salin selepas log masuk
Salin selepas log masuk
Oleh kerana fungsi rekursif memanggil dirinya sendiri, peraturan atau titik putus diperlukan untuk menamatkan proses atau gelung. Keadaan ini dipanggil keadaan penanda aras. Setiap program rekursif memerlukan keadaan penanda aras, jika tidak, proses akan menghasilkan gelung tak terhingga.

Keperluan kedua adalah kes rekursif, iaitu, fungsi panggilan itu sendiri.

mari kita ambil contoh:

Dalam contoh ini, anda akan menulis fungsi faktorial yang mengambil integer (nombor positif) sebagai input. Faktorial untuk nombor diperoleh dengan mengalikan nombor dengan semua bilangan bulat positif di bawahnya. Contohnya, ,

, factorial(3) = 3 x 2 x 1. factorial(2) = 2 x 1 factorial(0) = 1 pertama menentukan kes penanda aras, iaitu, faktorial (0) = 1.

Seperti yang ditunjukkan di atas, terdapat hubungan antara setiap adegan faktorial berturut -turut. Anda perlu melihat faktorial (4) = 4 x faktorial (3). Begitu juga, faktorial (5) = 5 x faktorial (4).

Bahagian kedua akan menulis fungsi yang memanggilnya sendiri.

Selepas memudahkan, fungsi yang dihasilkan akan menjadi:

jika
def factorial(n):
    # 定义基准情况
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)

print(factorial(5))

# 结果
# 120
Salin selepas log masuk
Salin selepas log masuk
, penyelesaiannya ialah:

n==0

Sekarang anda tahu bagaimana menulis fungsi rekursif, mari kita lihat beberapa kajian kes yang akan menguatkan pemahaman anda tentang rekursi.
def factorial(n):
    # 定义基准情况
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)


print(factorial(0))

# 结果
# 1
Salin selepas log masuk
Salin selepas log masuk

Kajian Kes 1: Urutan Fibonacci

Dalam urutan Fibonacci, setiap nombor adalah jumlah nombor pertama, contohnya: 1 1 = 2; Urutan Fibonacci telah digunakan di banyak kawasan, yang paling biasa untuk peniaga forex meramalkan trend harga pasaran saham.

urutan Fibonacci bermula dengan 0 dan 1. Nombor pertama dalam urutan Fibonacci adalah 0, nombor kedua ialah 1, dan istilah ketiga dalam urutan ialah 0 1 = 1. Istilah keempat ialah 1 1 = 2, dan sebagainya.

Untuk mendapatkan fungsi rekursif, anda perlu mempunyai dua kes penanda aras, iaitu 0 dan 1. Anda kemudian boleh menukar mod penambahan ke kes lain.

Fungsi yang dihasilkan akan menjadi:

def rectangle(a, b):
    return a + b
Salin selepas log masuk
Salin selepas log masuk

Kajian Kes 2: Membalikkan rentetan

Dalam contoh ini, anda akan menulis fungsi yang mengambil rentetan sebagai input dan kemudian mengembalikan penyongsangan rentetan itu.

Mula -mula menentukan kes penanda aras, yang akan memeriksa sama ada rentetan itu sama dengan 0, dan jika ya, rentetan itu sendiri dikembalikan.

Langkah kedua adalah untuk memanggil semula fungsi penyongsangan untuk mengiris bahagian rentetan kecuali watak pertama, dan kemudian menggabungkan watak pertama ke hujung tali slice.

Fungsi yang dihasilkan adalah seperti berikut:

def factorial(n):
    # 定义基准情况
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)

print(factorial(5))

# 结果
# 120
Salin selepas log masuk
Salin selepas log masuk

Kajian Kes 3: Jumlah Elemen

Dalam contoh ini, anda akan menulis fungsi yang mengambil array sebagai input dan kemudian mengembalikan jumlah elemen dalam senarai.

Pertama, tentukan kes penanda aras, yang akan memeriksa sama ada saiz senarai adalah sifar, dan jika benar, kembali 0.

Langkah kedua mengembalikan elemen dan panggilan ke jumlah fungsi (), menolak elemen senarai.

penyelesaiannya adalah seperti berikut:

def factorial(n):
    # 定义基准情况
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)


print(factorial(0))

# 结果
# 1
Salin selepas log masuk
Salin selepas log masuk

Penyelesaian ke senarai kosong adalah seperti berikut:

def fibonacci(n):
    # 定义基准情况 1
    if n == 0:
        return 0
    # 定义基准情况 2
    elif n == 1:
        return 1
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)

print(fibonacci(5))

# 结果为 5
Salin selepas log masuk

Kesimpulan

Tutorial ini menerangkan apa yang anda perlukan untuk menyelesaikan program kompleks dalam Python menggunakan rekursi. Ia juga harus diperhatikan bahawa rekursi juga mempunyai batasan sendiri:

  • secara rekursif menduduki banyak ruang timbunan, menjadikannya lambat untuk mengekalkan program.
  • Fungsi rekursif memerlukan lebih banyak ruang dan masa untuk dilaksanakan.
  • Fungsi rekursif boleh menjadi rumit dan sukar untuk debug.

Imej kecil ini dijana menggunakan Open AI Dall-E.

Atas ialah kandungan terperinci Demystifying Python Recursion. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan