-3
我正在研究下面的代碼的大O時間複雜性。代碼所做的是遞歸調用,以解決在所有寶石都在單個杯子中之前執行empty
操作的嘗試。大O的幫助,我有一個基本的想法
到目前爲止,我得到的是,遞歸調用從限制調用solve
,直到限制現在爲1.因此,大O是(限制,限制-1,限制-2,直到限制= 1) 。
這個遞歸函數是O(n)嗎?
public void solve(Cups cups, int limit, boolean debug){
String prevState = cups.toString();
for(int i = 0; i < cups.size(); i++){ //for every cup
Cups emptyCups = cups.empty(i); //make a new instance and empty the contents of cup
emptyCups.stateList.addAll(cups.stateList);
emptyCups.stateList.add(prevState); //add previous state to stateList arraylist
emptyCups.moveList.addAll(cups.moveList); //add all moves to arraylist
emptyCups.moveList.add(i); //add i position to move list
if(debug = true){
System.err.println(prevState + " empty-cup:"+ i +
", limit:" + limit + " => " + emptyCups);
}
if(emptyCups.size() == 1){ //base case
StringBuilder solution = new StringBuilder("moves:" + emptyCups.moveList);
solution.append(" cups:");
for(int j = 0; j < emptyCups.stateList.size(); j++){
solution.append(emptyCups.stateList.get(j) + " ");
}
solution.append(emptyCups.toString());
System.out.println(solution);
unsolvable = false;
} else if(limit > 1){
solve(emptyCups, limit - 1, debug);