完全理解遞迴與分治 3種方法求陣列最大值為例子

2021-07-24 17:03:58 字數 1962 閱讀 3803

遞迴,分治是一種常見迭代方法。在二叉樹遍歷,線性表中遍歷十分常見。

遞迴、分治最核心的思想是 遞推。

從外層–》內層,壓棧,使得計算規模不斷減小。

從內層–》外層,出棧,需要把計算結果傳遞給外層,做計算。

編寫**請問下自己下面幾個問題:

1、傳入的引數是什麼,是作為緩衝來接收嗎,

2.、返回的結果是什麼,這個結果需要帶入到外層遞推公式中。

3、外層函式主要包括:

遞迴的終結點,和計算過程。

寫在遞迴式的前面

4、內層函式不斷返回值,寫在遞迴式的後面

5、你需要把結果帶入到函式中,可以一句話概括乙個函式的作用

package myleetcode.divide_conquer;

/** * 方法一:

* 遞推式:

* 引數: left,right;

* 思路:當前層最大值=max(max左,max右)

* 外層函式:(入棧)

* 1、分的終點:最後兩個結點,返回其最大值

* 2、分的函式體,mid=(left + right )/2 ,並分別求其左右兩邊最小值

* 3、遞推式:[left:,mid] 和[mid+1,right]

* * 內層函式:

* 出棧:把左右兩邊的結果求最大值

方法二:

遞推是max=max(method(m-1),array[m]);

終結點是:

當m=1,

出棧,返回當前函式的結果即可

方法三:

傳入的引數當前的max,如果當前值array[m]比原來的max更大就更新

終結點:m到達0

出棧:返回方法結果,【終點掌握,傳參來接收最大值,用以此來返回】

* */

public

class maxtestind_c ;

system.out.println(max(array,0,array.length-1));

system.out.println(max2(array,array.length-1));

system.out.println(max3(array,array.length-1,array[array.length-1]));

}//分治法求陣列最大值;返回的是兩個索引的最大值

public

static

int max(int array, int left, int right)

int mid = (left + right) / 2;

int leftmax = max(array, left, mid);

int rightmax = max(array, mid + 1, right);

return math.max(leftmax, rightmax);

}//遞迴法,只需要處理最後的一步就好了:缺點需要多次呼叫max

public

static

int max2(int array,int m)

int maxfinal=math.max(max2(array,m-1),array[m]);

return maxfinal;

}//分治:

//用maxnum2來儲存最大的值,如果有更大的就更新,

// 每次返回的是array[maxindex] > maxnum2

public

static

int max3(int array ,int maxindex,int maxnum2)

if (array[maxindex] > maxnum2)

int maxfinal= max3(array,maxindex-1,maxnum2);

return maxfinal;//出棧時候要返回的是結果

}}

PHP遞迴四種方法

data json data str replace data arr json decode data true print r arr dir foreach arr as k v header content type text html charset utf 8 print r arr p...

CRC的3種方法

一.crc16演算法 首先在原始檔標頭檔案加入錶值 cpp view plain copy print?crc16碼表 static word const wcrc16table 256 crc16碼表 static word const wcrc16table 256 然後在檔案中加入下列函式 c...

3種方法實現比較

stl排序之sort函式 2012年07月26日 23 26 24 閱讀數 33036 stl容器的排序,支援隨機訪問的容器vector,deque,string沒有sort成員,可呼叫std sort排序 list排序呼叫自帶的list sort。下面是std sort函式,有兩個版本 cpp v...