2016-10-08 58 views
1

我知道如何使用循環來完成這個簡單的問題,但我想用遞歸進行更多的練習。我試圖用PHP遞歸查找數組中的最大值。我的基本想法是與新陣列的最大值比較數組的第一個值(由製造除去給定數組的第一個值):使用PHP中的遞歸在數組中尋找最大值

function find_max($arr) 
{ 
    if ($arr = []) 
    { 
     return 0;   // base case 
    } else 
    { 
     if ($arr[0] > find_max(rest_of($arr))) 
     { 
      return $arr[0]; 
     } else 
     { 
      return find_max(rest_of($arr)); 
     }   
    } 
} 

function rest_of($arr) 
{ 
    unset($arr[0]);     // remove the first value of the array 
    $arr = array_values($arr);  // re-index the array 
    return $arr; 
} 

但是當我運行,它似乎有着無窮的循環。 「未定義偏移:0」 任何人都可以幫助我嗎?

+0

可能一個愚蠢的問題,可能是我不明白你的問題。但是,爲什麼不簡單地遍歷該數組,在var,compare,re-save,...中保存最高值(以及它的索引)?? – Jeff

+0

或按價值排序? – Jeff

+1

http://stackoverflow.com/questions/7778564/get-the-1st-5-largest-values-from-an-array檢查這個..... – user3099298

回答

1

的問題是因爲在這裏你的基本條件,

if($arr = []){ ... 

=是賦值運算符,而不是比較操作。您需要的是比較運算符==。因此,它應該是,

if($arr == []){ 

此外,你可以改變你的基本條件這樣的方式,

if(count($arr) == 1){ 
    return $arr[0]; // base case 
} 

所以你find_max()功能應該是這樣的:

function find_max($arr){ 
    if(count($arr) == 1){ 
     return $arr[0]; // base case 
    } 
    if ($arr[0] > find_max(rest_of($arr))){ 
     return $arr[0]; 
    } else{ 
     return find_max(rest_of($arr)); 
    } 
} 
+0

哈!我怎麼能忽略這個!? – Jeff

+0

@Jeff別擔心,這一切都發生在我們所有人身上。 ;-) –

+0

所以我的回答是完全錯誤的......我會刪除它;) – Jeff