用遞迴的方式陣列求和
遞迴公式推導 單獨拿出最左邊元素,然後和其餘的相加
sum(arr[0…n-1]) = arr[0] + sum(arr[1…n-1])
sum(arr[1…n-1]) = arr[1] + sum(arr[2…n-1])
…sum(arr[n-1…n-1]) = arr[n-1] + sum()
基本問題
sum()
//遞迴方法總結: 從**開始遞迴求和 array[left .... n]
//遞迴函式,遞迴方法體,體現公式
private
static
int sumrecursion (
int[
] array,
int left)
public
class
sumarraybyrecursion
//遞迴體
return
sumrecursion
(arrs,0)
;//遞迴初始呼叫,遞迴從陣列index=0開始
}//遞迴方法總結: 從**開始遞迴求和 array[left .... n]
//遞迴函式,遞迴方法體,體現公式
private
static
int sumrecursion (
int[
] array,
int left)
//遞迴畫**析
/** 陣列arr = index從 0~3 length=4
* 使用者呼叫 sumre(arr, 0)
** 遞迴展開:
* 第0層:遞迴開始與結束處:return sumre(arr, 0)
* 第一層:return arr[0] + sumre(arr, 1)
* 第二層:(arr[0]) + return arr[1]+sumre(arr, 2)
* 第三層:(arr[0] + arr[1]) + return arr[2]+sumre(arr, 3)
* 第四層:(arr[0] + arr[1] + arr[2]) + return arr[3]+sumre(arr, 4)
* 第五層:(arr[0] + arr[1] + arr[2] + arr[3]) + return 0;
* !!! 每一層的return ***x 的解釋,在下一層的括號外的部分
* 從上往下是遞
* 從下往上是歸 一層層繼續返回,最後回到第0層
*/public
static
void
main
(string[
] args)
; system.out.
println
(sum
(array));
int[
] array1 =
; system.out.
println
(sum
(array1));
}}
用遞迴的方式鍊錶求和
遞迴求和
public
class
sumlinkedlistbyrecursion
private
static
int sumrecursion (listnode head)
return head.val +
sum(head.next);}
public
static
void
main
(string[
] args)
; listnode head =
newlistnode
(array)
; system.out.
println
("listnode:"
+ head)
; system.out.
println
("sum:"
+sum
(head));
}}
鍊錶 listnode類
以乙個listnode物件打頭的一串
public
class
listnode
//自己測試**,需要呼叫solution中的removeelements(listnode head, int val)
//所以我們自己構造出 listnode head!!!
//新建立乙個建構函式
public listnode (
int[
] arrs)
//這個this 就是建立的鍊錶的頭節點!!!!
this
.val = arrs[0]
;//對於listnode來說,第乙個元素就是head,而且要給val賦值!!! 接著把下面的元素接起來
listnode current =
this
;//!!!! 從第乙個節點開始!!!!
for(
int i =
1; i < arrs.length ; i ++)}
//!!!以當前節點為頭節點的鍊錶資訊字串!!!!!!!!!
@override
public string tostring()
ret.
("null");
return ret.
tostring()
;}}
鍊錶與陣列的遞迴
鍊錶的遞迴 設head指向乙個非空單向鍊錶 例一 正向輸出鍊錶資料域的值 void printlink elemsn head 例二 逆向輸出單項鍊表資料域的值 void printlink elemsn head 例三 返回單向鍊錶節點的個數 int countnode elemsn head 例...
反轉鍊錶 遞迴與非遞迴實現
一 迭代實現 思路 通過每次遍歷,修改當前結點與上一結點指向,遍歷到最後乙個結點,鍊錶也就實現了反轉 首先我們定義三個指標,分別指向當前節點cur 前一結點pre 下一節點next,並且pre和next為null 起始狀態為 第一次 執行 next cur next cur next pre pre...
反轉鍊錶(非遞迴,哨兵,遞迴)
給你單鏈表的頭節點 head 和兩個整數 left 和 right 其中 left right 請你反轉從位置 left 到位置 right 的鍊錶節點,返回 反轉後的鍊錶 非遞迴解法 反轉cur.next cur.next pre pre cur cur next next cur.next 新建...