五 鍊錶與遞迴2 遞迴陣列求和 遞迴鍊錶求和

2021-10-08 04:25:42 字數 2806 閱讀 6139

用遞迴的方式陣列求和

遞迴公式推導 單獨拿出最左邊元素,然後和其餘的相加

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 新建...