1. 程式人生 > >面試之路(23)-遞迴和迴圈優缺點詳解

面試之路(23)-遞迴和迴圈優缺點詳解

使用場景

需要重複的多次的計算相同的問題,會用到遞迴和迴圈

定義

遞迴

遞迴是內部呼叫這個函式本身。

迴圈

通過設定初始值和終止條件,在一個範圍內重複運算

優缺點分析

遞迴

雖然有程式碼簡潔的優點,但是時間和空間消耗比較大。每一次函式呼叫都需要在記憶體棧中分配空間以儲存引數,返回地址以及臨時變數,而且往棧裡面壓入資料和彈出都需要時間。
另外遞迴會有重複的計算。遞迴本質是把一個問題分解為多個問題,如果這多個問題存在重複計算,有時候會隨著n成指數增長。斐波那契的遞迴就是一個例子。
遞迴還有棧溢位的問題,每個程序的棧容量是有限的。

迴圈

程式碼可讀性不如遞迴
但是效率更高

相關推薦

面試23-迴圈優缺點

使用場景 需要重複的多次的計算相同的問題,會用到遞迴和迴圈 定義 遞迴 遞迴是內部呼叫這個函式本身。 迴圈 通過設定初始值和終止條件,在一個範圍內重複運算 優缺點分析 遞迴 雖然有程式碼簡潔的優點,但是時間和空間消耗比較大。每一

張小白的滲透——XSS跨站指令碼漏洞

XSS簡介 XSS又叫CSS(Cross Site Script),即跨站指令碼攻擊。是指攻擊者在網頁中嵌入客戶端指令碼,通常是JavaScript編寫的惡意程式碼,當用戶使用瀏覽器瀏覽被嵌入惡意程式碼

《零基礎入門學習Python》23--:這幫小兔崽子

前言 我們接下來吧遞迴的用法再熟練一點,大家都知道斐波那契數列吧,以下我們以實際的兔子繁殖的例子來編寫一個關於斐波那契數列的遞迴函式 知識點 我們都知道兔子繁殖能力是驚人的,如下圖:  我們可以用數學函式來定義:  迭代實現 def

面試28-反轉連結串列reverse ListNode

反轉連結串列: java類 public class ListNode{ int key; ListNode next; } 思路分析: 需要三個指標,current,

面試3-MVC,MVP,MVVM

一:mvc mvc結構: 檢視(View):使用者介面。 控制器(Controller):業務邏輯 模型(Model):資料儲存 mvc各部分的通訊方式 mvc互動模式 通過 View 接受指令,傳遞給 Controller。 另一種

面試25-斐波那契數列類問題的

斐波那契數列介紹: 常見的遞迴解法: int Fibonacci(int n){ if(n <= 0){ return 0; } if(n == 1){ return 1; }

面試29-TCP流量控制擁塞控制-滑動視窗協議

擁塞: 擁塞發生的主要原因在於網路能夠提供的資源不足以滿足使用者的需求,這些資源包括快取空間、鏈路頻寬容量和中間節點的處理能力。由於網際網路的設計機制導致其缺乏“接納控制”能力,因此在網路資源不足時不能限制使用者數量,而只能靠降低服務質量來繼續為使用者服務,也

Hadoop學習理論基礎邏輯思維

file 工作 puts 範圍 小文件 集合 無效 任務 問題 三個題目 第一題 問題描述 統計出當前這個一行一個IP的文件中,到底哪個IP出現的次數最多 解決思路 //必須要能讀取這個內容 BufferedReader br = n

scala成長2對象

ascii int 紅色 部分 類名 基類 req 字面量 標識符 scala提供了一種特殊的定義單例的方法:object關鍵字 scala> object Shabi{ | val age = 0 | val name = "shabi"

軟體工程——個人技術流程

個人技術和流程 1. 單元測試 1.1 寫一個單元測試 1.2 用以驗證的Assert類/斷言 1.3 如何寫好單元測試 1.4 迴歸測試 2. 效能分析工具 1. 單元測試 一般情況下一個軟體

cocos2d-x學習——分析AppDelegateHelloWorldScene檔案

這裡我們來看一下cocos自動給我們生成的工程裡有些什麼東西,並且分析一下這些程式碼的用途,來為我們以後編寫cocos程式鋪下基礎。 這裡我建議看我這份隨筆的看官先看看cocos官網的快速入門手冊,不然可能會比較迷糊(因為待會要分析一些程式碼,如果以前沒見過的話會比較昏)。傳送門在這裡 其中一些基本不需要程式

maven學習生命週期外掛

1、什麼是生命週期?外掛的作用? 前面我們說過,maven是一個專案構建、依賴管理的工具,生命週期就是maven在專案構建的過程中抽象出來的一系列子過程,例如編譯、執行測試、打包等等過程。 需要注意的是,maven只是將生命週期進行了抽象化的定義,真正實現生

Python小白學習—【類物件】【列表】【列表相關功能】

類和物件 (簡單的瞭解一下這個概念,初步有個印象,這個概念很重要,後面會著重講) 類:具有相同屬性和方法的物件的集合;      物件:萬物皆物件; 概念很抽象(每當我看不到概念的時候,我就會通過舉例來理解) 我們說的數字(int)、字串(str)以及今天學習的列表(list)就是類 list # 類

Java專家---資料訪問資料持久化框架的總結

Java資料訪問和持久化(SQL) 方案一:JDBC 什麼是JDBC? Java語言訪問資料庫的一種規範,是一套API。JDBC (Java Database Connectivity) API,即Java資料庫程式設計介面,是一組標準的Ja

Netty框架學習—— EventLoop及事件迴圈機制

在前面的博文中,我們大致分析瞭解了Channel及其相關概念。在Netty的執行緒模型中,每個channel都有唯一的一個eventLoop與之相繫結,那麼在這篇博文中我們來看一下EvenLoop及其相關概念。 在傳統的Java NIO程式設計中,我們經常使用

[Java開發]8輸入流輸出流

1. Java流的分類 按流向分: 輸入流: 可以從其中讀入一個位元組序列的物件稱作輸入流。 輸出流: 可以向其中寫入一個位元組序列的物件稱作輸出流。 這些位元組序列的來源地和目的地可以是檔案,而且通常都是檔案,但是也可以是網路連線,甚至是記憶體塊。抽象類Input

Linux命令列學習——重定向管道

今天我們來總結一下個人認為linux下最為實用和厲害的重定向和管道 在說今天的重點之前,必須要先學一點其他的新知識:標準輸入(stdin)、標準輸出(stdout)、標準錯誤輸出(stderr) 標準輸入(stdin):程式碼為0,使用<或<<   輸入

Vue 刨坑——關於v-for迴圈下的checkbox選中以及提交購物車

最近剛接觸vue,作為前端三駕馬車之一,Vue不僅易上手,而且結構極其優雅,剛使用就對其愛不釋手,以下是本人在實際開發中所遇到的難題以及解決思路。 關於v-for迴圈下的checkbox選中以及提交 作為購物車的功能之一,複選框商

五.linux開發uboot移植——uboot配置編譯過程

一.uboot主Makefile分析1 1、uboot version確定(Makefile的24-29行) Makefile程式碼部分 (1)uboo

vue2.0專案實戰4生命週期鉤子函式

最近的專案都使用vue2.0來開發,不得不說,vue真的非常好用,大大減少了專案的開發週期。在踩坑的過程中,因為對vue的生命週期不是特別瞭解,所以有時候會在幾個鉤子函式裡做一些事情,什麼時候做,在哪個函式裡做,我們不清楚。 下面來總結一下vue的生命週期。 vue生命週期簡介 咱們從上圖可以很明顯的看出