3 回答

TA貢獻1776條經驗 獲得超12個贊
你可以這樣做:
int f(int n,boolean[] b,boolean val,int i)
{
if(i>=b.length)
return -1;
if(b[i]==val)
{
if(n==1)
return i;
else
return f(n-1,b,val,i+1);
}
return f(n,b,val,i+1);
}

TA貢獻1831條經驗 獲得超9個贊
public class Recursion {
private static boolean[] b = {true, true , false, false, true};
private static int i = 0;
private static int position = 0;
public static void check( int i, boolean[] b, boolean val ) {
if( i < b.length ) {
if( b[i] == val ) {
position = i;
}
i++;
check( i, b, val );
}
}
public static void main(String[] args) {
boolean myChoice = true;
check( Recursion.i, Recursion.b, myChoice );
System.out.println( "Last " + myChoice + " position computed is " + position );
}
}
遞歸是關于調用自身的方法。在上面的示例中,該方法檢查“計數器”變量 i 是否小于布爾數組的長度。接下來檢查數組的當前元素是否與選擇匹配。如果是,則將計數器值分配給該位置(最后計算的位置)。計數器遞增,并且該方法調用自身。
該過程一直持續到 i 等于布爾數組的大小。此時,該方法停止調用自身。

TA貢獻1847條經驗 獲得超7個贊
實際的函數從 0 開始計數,所以我在里面傳遞了一個位置-1。如果 i = 0,那么很明顯我們應該返回什么 - 第一個條目的索引。如果 i 大于 0,假設它是 1,那么我們將數組分成兩部分:我們已經搜索到的包含第一個條目的部分,以及數組的其余部分。這可以使用 subList() 來完成。現在我們可以在數組的其余部分上使用帶有 i-1 的函數,這將找到數組第二部分中第一個條目的索引。
此外,我們還必須添加我們剪切掉的內容的大小,這將list.subList(0, list.indexOf(value) + 1).size()需要記住原始數組中的索引。
public static void main(String[] args) {
List<Boolean> list = Arrays.asList(true, true, false, false, true, true, false, false); //8
int position = 4; //find index of fourth false
System.out.println(recursiveSearch(list, false, position - 1));
position = 2; //find index of second true
System.out.println(recursiveSearch(list, true, position - 1));
}
private static int recursiveSearch(List<Boolean> list, boolean value, int i) {
if(i == 0) {
return list.indexOf(value);
} else {
return list.subList(0, list.indexOf(value) + 1).size() + recursiveSearch(list.subList(list.indexOf(value) + 1, list.size()), value, i - 1);
}
}
添加回答
舉報