遞迴基本概念

2021-10-04 14:11:47 字數 2568 閱讀 1130

// 程式語言中,函式func(type a,……)直接或間接呼叫函式本身,則該函式稱為遞迴函式。

// 遞迴是一種解決問題的有效方法,在遞迴過程中,函式將自身作為子例程呼叫

// 為了確保遞迴函式不會導致無限迴圈,它應具有以下屬性:

// 乙個簡單的基本案例(basic case)(或一些案例) —— 能夠不使用遞迴來產生答案的終止方案。

// 一組規則,也稱作遞推關係(recurrence relation),可將所有其他情況拆分到基本案例。

// 注意,函式可能會有多個位置進行自我呼叫。

// 在實現遞迴函式之前,有兩件重要的事情需要弄清楚:

// 遞推關係: 乙個問題的結果與其子問題的結果之間的關係。

// 基本情況: 不需要進一步的遞迴呼叫就可以直接計算答案的情況。 有時,基本案例也被稱為 // bottom cases,因為它們往往是問題被減少到最小規模的情況,也就是如果我們認為將問題劃分為子問題是一種自上而下的方式的最下層。

/*

*題目來自leetcode

編寫乙個函式,其作用是將輸入的字串反轉過來。輸入字串以字元陣列 char 的形式給出。

不要給另外的陣列分配額外的空間,你必須原地修改輸入陣列、使用 o(1) 的額外空間解決這一問題。

你可以假設陣列中的所有字元都是 ascii 碼表中的可列印字元。

示例 1:

輸入:["h","e","l","l","o"]

輸出:["o","l","l","e","h"]

示例 2:

輸入:["h","a","n","n","a","h"]

輸出:["h","a","n","n","a","h"]

*/

// 遞迴解決

public static void reversestring(char arr, int left, int right)

// 交換收尾的值

char tmp = arr[left];

arr[left++] = arr[right];

arr[right--] = tmp;

// 重複呼叫

reversestring(arr, left, right);}​

// 迴圈解決

public static void reversestring2(char arr)

int left = 0;

int right = arr.length - 1;

while(left < right)

}

/**

場景專案中用到了乙個區域的表,表結構類似這樣的:

id name pid

1 root 0

2 sh   1

3 hp   2

而區域的id作為乙個實體的屬性.

現要求新增該實體的乙個屬性來放上表中的name的值,並且要求乙個節點都展示包括root.

類似這種:root/sh/hp...

*/public string getnodename(string nid)

​public void recursivenodename(listnames, string nid) else

}else

}

// 題目來自leetcode遞迴練習題

t1.給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。

你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。

示例:給定 1->2->3->4, 你應該返回 2->1->4->3.

t2.反轉乙個單鏈表。

示例:輸入: 1->2->3->4->5->null

輸出: 5->4->3->2->1->null

t3.斐波那契數,通常用 f(n) 表示,形成的序列稱為斐波那契數列。該數列由 0 和 1 開始,後面的每一項數字都是前面兩項數字的和。也就是:

f(0) = 0,   f(1) = 1

f(n) = f(n - 1) + f(n - 2), 其中 n > 1.

示例:輸入:2

輸出:1

解釋:f(2) = f(1) + f(0) = 1 + 0 = 1.

t4.假設你正在爬樓梯。需要 n 階你才能到達樓頂。

每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?

注意:給定 n 是乙個正整數。

示例:輸入: 3

輸出: 3

解釋: 有三種方法可以爬到樓頂。

1.  1 階 + 1 階 + 1 階

2.  1 階 + 2 階

3.  2 階 + 1 階

t5.給定乙個二叉樹,找出其最大深度。

二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。

說明: 葉子節點是指沒有子節點的節點。

示例:給定二叉樹 [3,9,20,null,null,15,7]

3/ \

9  20

/  \

15   7

返回它的最大深度 3

遞迴函式的基本概念

遞迴函式說白了就是乙個自己呼叫自己的函式 比方說def print num num if num 10 這是跳出的條件 return 這是跳出的位置 else print num num 1 print num num 再次呼叫自己 print num 1 這就算是乙個簡單的遞迴函式,依次列印1 1...

基本概念 C 基本概念

由於工作中需要用到c 編寫的一些工具,有時候需要根據需求修改或者定製工具,所以現在不得不學習一下c 的基礎語法,此為筆記,不成章法!機器語言 組合語言 高階語言 面向過程的程式設計方法 物件導向的程式設計方法 泛型程式設計方法 1 演算法設計 2 源程式編輯 3 編譯 4 連線 5 執行除錯 輸入裝...

基本概念 數控系統基本概念

第一章 基本概念 數控工具機cnc是一種按事先編制好的加工零件程式進行加工的高效 自動化加工裝置。是 computer numerical control machine tools 的簡稱。數控工具機較好地解決了複雜 精密 小批量 多品種的零件加工問題,是一種柔性的 高效能的自動化工具機。西門子系...