我需要編寫代碼爲這項任務,研究的主題是遞歸的方法:最長指數 - 遞歸
例子:考慮ARR = {0,5,1,1,2}。指數0,2和3放置良好:
- 指數0自P0 = 0以來就處於良好位置。
- 因爲P1 = 5> 1,所以索引1的位置不好。由於所有元素都爲正,這是不可能找到一個序列起始於該可以歸納爲1
- 索引2索引1處於有利地位,因爲P2 + P3 = 2
- 索引3處於有利地位,因爲P3 + P4 = 3.
- 索引4的位置不正確:我們無法找到從索引開始的可以加到4的序列 - 這是因爲P4是數組中的最後一個元素,它只有2。
我們定義一個放置好的索引的'放置好的長度'爲j-i + 1 - 當求和時表示索引放置得很好的序列的長度。有可能一個索引與多於一個單一的元素序列相配合。在這種情況下,「良好放置的長度」是定義索引爲「良好放置」的各種序列的最大長度。
實施例:看前面的例子:
- 索引0以及放置長度爲1(I = 0,J = 0,J-I + 1 = 1)。
- 索引2合適的長度是2(i = 2,j = 3,j-i + 1 = 2)。
- 索引3合適的長度是2(i = 3,j = 4,j-i + 1 = 2)。
- 對於指數1和4,沒有定義好位置的長度,因爲指數沒有很好的放置。
- 考慮arr = {0,5,1,1,2,0} - 索引3良好的長度現在是3(i = 3,j = 5,j-i + 1 = 3)。定義索引3的另一個序列與以前一樣是(i = 3,j = 4,j-i + 1 = 2),但是我們已經將定位良好的長度定義爲索引的最大值。
「最大放置長度」是arr中所有放置好的索引的放置良好長度之間的最大值。 如果數組中的索引沒有正確放置,則最大放置長度被認爲是零。
該函數應返回最大放置長度。
示例:對於前面的示例,longestIndex的返回值應爲2,因爲這是數組中任何放置良好的索引的最大放置長度。
限制:您不允許更改數組;您不得使用可從longestIndex獲得的超過1個附加(輔助)功能。不允許迭代。
這是我寫的代碼:
int longestIndexHelper(int arr[], int length, int old)
{
if(length==0)
return 0;
if((arr[length]+arr[length-1]==length-1)||
(arr[0]==0)&&(old!=0)&&(old-length==1))
return (longestIndexHelper(arr, --length, length)+1);
}
int longestIndex(int arr[], int length)
{
return longestIndexHelper(arr, length, length);
}
很顯然,這是行不通的:) 可能有人請盡力幫助?
你寫的代碼顯然不會編譯 - 你的if語句沒有別的用例。如果你編輯它以表明你已經嘗試過了,我或其他人可能會呃 – 2009-12-14 10:15:27
從什麼時候開始每個if語句塊都必須有'else'的情況......? – 2009-12-14 15:44:26