tft每日頭條

 > 生活

 > 遞歸算法平均值

遞歸算法平均值

生活 更新时间:2024-09-03 03:43:24

求數組中的最大值

遞歸算法平均值(遞歸算法求最大值)1

該函數的功能是 在L和R範圍上返回最大值

1、 L=R表示就一個數 最大值是它自己

2、如果不止一個數 就求中點的位置

一般的寫法是 (L R)/2

但這些寫有問題 如果數組長度很大 L R可能會溢出

溢出之後 結果可能為負值

可以寫成 L (R-L)/2

(R-L)/2 表示 L ~ R 之間距離的一半

L 加上 一半的距離 也是 L ~ R 的中點

這個結果是不溢出的 因為 L、R都不溢出,R>L,所以R-L也不溢出

更簡潔的寫法

L ((R-L)>>1) 右移一位 就等同于除2了

右移一位比除2要快

3、L ~ mid 範圍的調用遞歸求一個左側部分的最大值

4、mid 1 ~ R 範圍的調用遞歸求一個右側部分的最大值

5、全局最大值就是左側最大值和右側最大值較大的那個

舉例

遞歸算法平均值(遞歸算法求最大值)2

p(0,5)

中點位置是5/2=2的位置

遞歸算法平均值(遞歸算法求最大值)3

p(0,2)是0~2範圍上求個最大值

p(3,5)是3~5範圍上求個最大值

隻有都返回結果了

才知道0~5範圍上的最大值是誰

遞歸算法平均值(遞歸算法求最大值)4

p(0,2)又分為p(0,1)和p(2,2)

p(2,2)就是它自己了 直接返回

以此類推 遞推函數的依賴圖如下

遞歸算法平均值(遞歸算法求最大值)5

所有的子點跑完

最終彙總到p(0,5)的時候 才知道最終答案

執行p(0,5)的時候 知道要調用p(0,2)

p(0,5)的結果沒有出來,p(0,5)就進棧了

調p(0,2)的時候 知道自己要先調用p(0,1)

p(0,2)就進棧了

調用p(0,1) 知道先調用p(0,0)所以p(0,1)就進棧了

p(0,0)和p(1,1)計算完之後 p(0,1)就得到結果了

此時p(0,0)和p(1,1)就出棧了

依此類推

懸而未決的東西就會進到棧中

算完的東西就會從棧裡彈出

所以就可以認為整個遞歸過程就是一個多叉樹

利用棧玩了一個遍曆

每個節點都通過自己的子節點給自己彙總信息之後

才能夠繼續往上返回

那棧空間就是一個數的高度

隻能在一個高度上壓棧

這就是遞歸的過程

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved