遞迴函式原理技能包了解一下

2021-10-07 10:45:21 字數 1065 閱讀 5070

最近在看一本書:演算法**,然後剛好看到了遞迴,自以為很簡單的嘛,然後就**啪的打臉了。為啥原因被打臉呢?請看下面簡單的遞迴求陣列和的函式:

function sum (arr, value)

return value;

}sum([1,2,3],0);

如果執行以上**,你會發現:最終結果返回了3。當時很是納悶?為什麼會產生這個結果呢,

帶著這個疑問 我就好好又溫習了一遍遞迴章節

首先你必須知道 遞迴的兩大條件:基線條件和遞迴條件

1、基線條件:指的是停止呼叫自己的條件

2、遞迴條件:指的是呼叫自身的條件

知道了兩大條件後我們還需要了解到 遞迴函式的原理:既計算機是如何呼叫遞迴式的函式:

1、計算機中有乙個呼叫棧的記憶體空間,這個空間 專門用於存放計算機將要呼叫的函式列表。

2、呼叫棧的兩種使用方式,壓入棧和彈出棧,這兩個方法,好似存放和再拿出來使用。

3、遞迴函式,其實剛開始執行時,是先把已知的待執行函式都存放到呼叫棧中,然後依次執行,由於棧是先進後出的,所以遞迴函式的執行順序是和我們想象中的有所不同的。

好了,了解完遞迴的原理後,我們再拿開篇的函式sum 執行你會發現,剛開始執行時:sum([1,2],3)被放到待執行棧中。然後依次是sum([1],5)、sum(,6)

因為棧的特性:所以執行順序剛好是相反的,sum(,6) => sum([1],5) => sum([1,2],3) 所以我們最終得到的 3

具體執行順序請看完整的流程圖:

其實正確的寫法很簡單,並不需要傳遞多餘的引數:

function sum(arr)

return 0

}sum([1,2,3]);

你get 到遞迴函式的技能了嗎?

了解一下SQL注入的原理

sql注入攻擊的危害性很大。在講解其防止辦法之前,資料庫管理員有必要先了解一下其攻擊的原理。這有利於管理員採取有針對性的防治措施。一 sql注入攻擊的簡單示例。statement select from users where value a variable 上面這條語句是很普通的一條sql語句,...

了解一下NTLM

ntlm 在客戶機與伺服器之間提供身份認證的安全包。ntlm 身份驗證協議 是 質詢 應答身份驗證協議,是windows nt 4.0 及其早期版本中用於網路身份驗證的預設協議。windows 2000 中仍然支援該協議,但它不再是預設的。ntlm身份驗證過程 ntlm 是用於 windows nt...

了解一下 display flex

一 display flex flex 是flexuble box的縮寫,意為 彈性盒子 用來為盒狀模型提供最大的靈活性.任何乙個容器都可以指定為flex布局.box 行內元素也可以使用flex布局.box webkit核心的瀏覽器,必須加上 webkit box 注意為父級設計flex布局以後,子...