簡體   English   中英

用遞歸查找數組中的最大整數

[英]Finding the maximum integer in an array with recursion

我什至不知道從這個練習開始。 我已經看了兩個小時了,不知道該怎么辦。 有人告訴我寫一個采用整數數組和一定范圍的索引(低和高)的方法。

我得到的提示是,基本情況應在low == high ,最大返回范圍內的值(應為array[low] )。 然后,如果我們在數組范圍內有多個元素,則可以將其拆分,在每個片段中找到最大值,然后找到最大值。 但是,我不知道如何進行。 我通過定義兩個新數字maxRange maxRange(array, low, (low+high)/2)maxRange(array, (low+high)/2, high)嘗試使用該方法,並嘗試進行某種比較,但我不確定如何繼續。

您需要做的是將數組分成兩半,直到只剩下一個元素。 這是基本情況。

在每一遞歸步驟中,調用maxRange在下半部,並maxRange上的上半部。 這些將返回這兩個范圍內的最大整數。 現在,如果我們知道下半部分和上半部分的最大整數,那么顯然兩半中的最大整數是兩者中的較大者。 說得通?

另一種解釋:

在設計遞歸函數時,請嘗試假裝您已經完成了遞歸並且該函數可以按預期工作。 因此,當您仍在編寫maxRange假裝它已經maxRange您的要求:給定一個數組,一個"low"整數(范圍的開始,包括端點)和一個"high"整數(范圍的結束,不是包含在內),則返回該范圍內的最大整數。 然后,我們只需編寫函數maxRange將問題分成較小的部分,以便遞歸直到基本情況。 當我們遇到基本情況(low == high - 1) ,我們只返回array[low] ,因為只有一個元素。 請記住,根據定義函數的方式(如果包括high ),基本情況可以是(low == high)(low == high - 1) 在紙上嘗試一下! 請記住,整數算術僅返回除法的整數部分:3/2為1。

您使用什么語言? 如果您正在使用c#,則可以...

int [] arr = {1,2,3,4}; int max = arr.Max();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM