算法簡介:遞歸

遞歸

  • 1. 遞歸
    • 1.1 基線條件和遞歸條件
  • 2. 棧
    • 2.1 調用棧
    • 2.2 遞歸調用棧

1. 遞歸

循環和遞歸可以實現相同的功能,如:

  • 循環
def look_for_key(main_box)pile = main_box.make_a_pile_to_look_thorugh()while pile is not empty:box = pile.grab_a_box()for item in box:if item.is_a_box():pile.append(item)elif item.is_a_key():print "find the key!"
  • 遞歸
def look_for_key(box)for item in box:if item.is_a_box():look_for_key(item)elif item.is_a_key():print "find the key!"

如果使用循環,程序的性能可能更高;如果使用遞歸,程序可能更容易理解。

1.1 基線條件和遞歸條件

編寫遞歸函數時,必須告訴它何時停止遞歸。因此,每個遞歸函數都有兩個部分:基線條件和遞歸條件。遞歸條件指的時函數調用自身,而基線條件指的是函數不調用自己,從而避免形成無限循環。

def countdown(i)print iif i < 1:  //基線條件returnelse      //遞歸條件countdown(i)

2. 棧

棧是一種簡單的數據結構。
數據存儲和讀取特點是:“先進后出”。
具備兩種操作:壓入(插入)和彈出(刪除并讀取)。

2.1 調用棧

計算機在內部使用被稱為調用棧的棧。
當在一個函數中調用多個另外的函數時:調用另一個函數時,當前函數暫定并處于未完成狀態。只有先執行完調用函數,再回到當前函數進行執行。
計算機使用一個棧來表示函數的內存塊(調用函數時,函數調用涉及的所有變量的指存儲在內存中)。
棧用于存儲多個函數的變量,被稱為調用棧。

2.2 遞歸調用棧

def fact(x)if x == 1:  //基線條件return 1else      //遞歸條件return fact(x-1)*x

每個fact(x)調用都有自己的x變量。在一個函數調用中不能訪問另一個的x變量。

使用棧雖然很方便,但是也是需要付出代價:存儲詳盡的信息可能占用大量的內存。每個函數調用都要占用一定的內存,如果棧很高,就意味著計算機存儲了大量函數調用的信息。此時可以選擇:重新編寫代碼,轉而使用循環;使用尾遞歸。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/710785.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/710785.shtml
英文地址,請注明出處:http://en.pswp.cn/news/710785.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LLM 聊天對話界面chatwebui 增加實時語音tts功能

類似豆包聊天,可以實時語音回復 1、聊天界面 streamlit頁面 參考界面:https://blog.csdn.net/weixin_42357472/article/details/133199866 stream_web.py 2、 增加實時語音tts功能(接入melotts api服務) 參考:https://blog.csdn.net/weixin_42357472/article/detai…

vue3學習 ref和reactive的使用

使用ref聲明一個響應式對象并使用 <script lang"ts" setup> import { ref } from vue; const message ref("HelloWorld") message.value"被修改了啊~~" </script> <template>{{ message }} </template>ref() 接收參數…

Docker容器與虛擬化技術:OpenEuler 使用 docker-compose 部署 LNMP

目錄 一、實驗 1.環境 2.OpenEuler 部署 docker-compose 3.docker-compose 部署 LNMP 二、問題 1.ntpdate未找到命令 2.timedatectl 如何設置時區與時間同步 3.php網頁顯示時區不對 一、實驗 1.環境 &#xff08;1&#xff09;主機 表1 主機 系統架構版本IP備注Lin…

docker啟動容器報錯:ERRO[0000] error waiting for container: context canceled,解決方法

系統環境&#xff1a;ubuntu16.04&#xff0c;已安裝docker 執行命令&#xff1a;sudo docker run -it --privileged --shm-size128g -v /home:/home docker-image /bin/bash 報錯 docker: Error response from daemon: could not select device driver "" with …

Android PMS實戰——Hook技術介紹(十四)

在了解了 PMS 的調用流程之后,都有那些用處呢?首先幫助了解 Android 包管理系統原理,還有就是配合 AMS 通過 Hook 技術,實現熱更新、插件化等功能。 我們可以通過反射獲取到 PackageParser 對象,再反射調用它的 parsePackage() 傳入 apk 路徑完成解析獲取到 Package 對象,…

厚膜電阻與薄膜電阻相比,特點是什么?

厚膜電阻與薄膜電阻是兩種常見的電阻器件&#xff0c;它們之間的特點主要有以下幾個方面&#xff1a; 1. 厚度不同&#xff1a;厚膜電阻的膜層厚度較大&#xff0c;一般在幾微米到幾十微米之間&#xff0c;而薄膜電阻的膜層厚度較薄&#xff0c;一般在幾納米到幾微米之間。 2. …

單片機精進之路-9ds18b20溫度傳感器

ds18b20復位時序圖&#xff0c;先將b20的數據引腳拉低至少480us&#xff0c;然后再將數據引腳拉高15-60us&#xff0c;再去將測傳感器的數據引腳是不是變低電平并保持60-240us&#xff0c;如果是&#xff0c;則說明檢測到溫度傳感器&#xff0c;并正常工作。需要在240us后才能檢…

xss高級靶場

一、環境 XSS Game - Ma Spaghet! | PwnFunction 二、開始闖關 第一關 看看代碼 試一下直接寫 明顯進來了為什么不執行看看官方文檔吧 你不執行那我就更改單標簽去使用唄 ?somebody<img%20src1%20onerror"alert(1)"> 防御&#xff1a; innerText 第二關…

Codeforces Round 930 (Div. 2) (A~B)

比賽&#xff1a;Codeforces Round 930 (Div. 2) (A~B) 目錄&#xff1a;A B A題&#xff1a;Shuffle Party 標簽: 模擬 題目大意 給你一個數組 a1,a2,…,an。最初&#xff0c;每個 1 ≤ i ≤ n都有 ai i&#xff0c;整數 k ≥ 2的運算 swap(k)定義如下&#xff1a; 設 d是…

Python圖像形態學處理:腐蝕、膨脹、禮帽、黑帽……

文章目錄 二值形態學灰度形態學 python圖像處理教程&#xff1a;初步&#x1f4f7;插值變換 最基礎的形態學操作有四個&#xff0c;分別是腐蝕、膨脹、開計算和閉計算&#xff0c;【scipy.ndimage】分別實現了二值數組和灰度數組的這四種運算。而針對灰度圖像&#xff0c;【sc…

Office/WPS 好用的PPT插件-智能選擇布局

軟件介紹 PPT大珩助手是一款全新設計的Office PPT插件&#xff0c;它是一款功能強大且實用的PPT輔助工具&#xff0c;能夠輕松幫助您修改、優化和管理幻燈片。憑借豐富的功能和用戶友好的界面&#xff0c;PPT大珩助手能夠助力您打造出精美而專業的演示文稿。我們致力于為用戶提…

Flutter學習7 - Dart 泛型

1、泛型類 //泛型類 class Cache<T> {final Map<String, T> _cache {};void saveData(String key, T value) {_cache[key] value;}//泛型方法T? getData(String key) {return _cache[key];} }void main() {Cache<int> cache1 Cache();const String name…

NGINX的重寫與反向代理機制解析

目錄 引言 一、重寫功能 &#xff08;一&#xff09;if指令 1.判斷訪問使用的協議 2.判斷文件 &#xff08;二&#xff09;return指令 1.設置返回狀態碼 2.返回指定內容 3.指定URL &#xff08;三&#xff09;set指令 1.手動輸入變量值 2.調用其它變量值為自定義變…

RISC-V特權架構 - CSR寄存器

RV32/64 特權架構 - CSR寄存器 1 CSR地址空間2 CSR定義2.1 用戶級2.2 監管級2.3 超級監管級2.4 機器級 3 CSR訪問3.1 CSRRW3.2 CSRRS3.3 CSRRC3.4 CSRRWI3.5 CSRRSI3.6 CSRRCI 本文屬于《 RISC-V指令集基礎系列教程》之一&#xff0c;歡迎查看其它文章。 1 CSR地址空間 RISC&…

房貸計算器微信小程序原生語言

微信小程序: 房貸計算器 效果: 輸入 300萬 結果 還款明細 一共有3個頁面 1、輸入頁面 2、結果頁面 3、詳情頁面 1 index頁面 index.wxml文件 <view class="text-black"><!--房屋總價--><view class="cu-bar bg-white solid-bottom"&…

TCP/IP狀態遷移

TCP&#xff08;傳輸控制協議&#xff09;是一種面向連接的流式控制協議&#xff0c;它定義了不同的狀態以管理通信過程中的連接。TCP 狀態遷移描述了 TCP 連接在不同狀態之間的轉換過程&#xff0c;常見的 TCP 狀態包括 CLOSED、LISTEN、SYN_SENT、SYN_RECEIVED、ESTABLISHED、…

免費下載《金融行業數據安全交換解決方案白皮書》

金融行業包括商業銀行業務、證券業務、保險業務、基金業務、信托業務等&#xff0c;因此數據類型多種多樣&#xff0c;并且數據涉及主體眾多&#xff0c;應用場景上較為多樣復雜&#xff0c;在數據交換上存在安全、合規、可控、可靠、高效等需求。 金融行業會面臨哪些數據安全…

IIS發布PHP網站字體404解決辦法

最近在使用 IIS 發布 PHP 網站時&#xff0c;我遇到了一個前端問題&#xff0c;即字體庫文件 404 錯誤。這個問題的根本原因是 IIS 未能正確識別字體文件類型&#xff0c;導致瀏覽器在加載頁面時無法正確獲取所需字體資源&#xff0c;進而觸發了404錯誤。這樣的問題會導致網站頁…

npm install 報錯常見的解決方法

npm install 報錯的情況有很多種&#xff0c;每種錯誤的具體解決方案也有所不同。這里我將匯總一些常見的npm install報錯及其解決辦法&#xff1a; 1. 下載速度慢/網絡問題 解決辦法&#xff1a;更換npm包的鏡像源至國內鏡像&#xff0c;如淘寶npm鏡像&#xff1a;npm confi…

Javascript:輸入輸出

目錄 一.前言 二.正文 1.輸出 2.輸入 3.字面量 概念&#xff1a; 三.結語 一.前言 Javascript作為運行瀏覽器的語言&#xff0c;對于學習前端的同學來說十分重要&#xff0c;那么從現在開始我們將開始介紹有關 Javascript。 二.正文 1.輸出 document.write() : 向body內…