首頁  >  文章  >  後端開發  >  了解 Python 中的遞歸:那麼,你會面對它嗎?

了解 Python 中的遞歸:那麼,你會面對它嗎?

Linda Hamilton
Linda Hamilton原創
2024-10-31 18:10:14421瀏覽

Entendendo Recursão em Python: E aí, vai encarar?

遞歸是程式設計中的一個基本概念,但有時它看起來有點神秘。所以,讓我們簡化一下,看看它比看起來更容易!

什麼是遞迴?

遞歸是指函數透過呼叫...本身來解決問題!是的,沒錯。它就像一個你一遍又一遍地講述的故事,只是每次都短一點,直到你到達終點。但要使其正常運作,需要滿足兩個黃金法則

  1. 終止條件:這是函數必須停止的點,否則它將處於永恆循環中(我們不希望這樣,對吧?)。
  2. 自呼叫:這是函數呼叫自身的時候,越來越深,直到達到終止條件。

現在,讓我們看看這在實踐中是如何運作的!

它是如何運作的?

為了更好地解釋它,沒有什麼比階乘的經典範例更好的了!想像一下我們想要計算 (5!)(讀「五階乘」)。它是如何運作的?

5! = 5 * 4 * 3 * 2 * 1!

但是,透過遞歸,我們可以這樣想:

5! = 5 * 4!

並且,按順序,4! 是(4 * 3!),依此類推,直到我們達到(1!),這是我們的基本情況(終止條件)。

實例:階乘

讓我們來看看程式碼,因為這就是概念的實現之處!這是使用遞歸的著名階乘計算:

def fatorial(numero):
    if numero == 0 or numero == 1:
        return 1  # caso base
    else:
        return numero * fatorial(numero - 1)

說明:

  1. 此處的基本情況是當數字為 0 或 1 時,函數只會傳回 1。
  2. 如果數字大於 1,則以數字 - 1 呼叫函數,將值累積到基本情況。

複雜

  • 時間:(O(n)) — 因為有 n 次遞迴呼叫。
  • Space: (O(n)) — 執行堆疊深度為 n。

實際例子:斐波那契

另一個廣泛使用的例子是斐波那契數列。她是這樣的:

f(0) = 0, f(1) = 1, f(n) = f(n - 1) f(n - 2)

讓我們來看程式碼!

def seq_fib(n):
    if n == 0:
        return 0
    if n == 1:
        return 1
    if n > 1:
        return seq_fib(n - 1) + seq_fib(n - 2)

斐波那契複雜度:

  • 時間:(O(2^n)) — 指數! ⚠️
  • Space:(O(n)) — 遞歸呼叫的堆疊使用。

這就是為什麼對於大值,純遞歸的斐波那契計算可能有點麻煩。但出於學習目的,這是一個很好的例子!

最後

遞歸是程式設計中的關鍵概念,雖然一開始看起來有點嚇人,但透過練習它會變得容易得多。這些階乘和斐波那契例子只是開始!

如果你想練習,請在這個 Colab 中查看並複製一份!

以上是了解 Python 中的遞歸:那麼,你會面對它嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn