邏輯Bug:在使用遞迴時的返回問題
阿新 • • 發佈:2019-01-31
最近練習時寫了個簡單的二叉搜尋樹,find方法採用遞迴,開始是這樣寫的:
在樹中添加了三個元素50,25,75,發現find(25)返回的總是false。於是我在方法return true之前加了一句System.out.println("true"); 發現可以顯示,這說明return true執行了。斷點進去執行發現,return true以後程式居然還在往下執行!一直執行到最後的return false,於是返回的都是false了。public boolean find(int key) { if(this.data == key) { //System.out.println("true"); return true; } if(key < this.data && this.leftChild != null) { leftChild.find(key); } else if(this.rightChild != null){ rightChild.find(key); } return false; }
研究了半天發現,這個return true其實是遞迴執行一次以後的程式的返回值,也就是說其實原來的方法還沒有執行完,只是第一層的遞迴執行完了,而我卻以為整個方法都執行完成了!
修改後的程式碼如下:
說到底還是對遞迴不熟練造成的!public boolean find(int key) { if(this.data == key) { return true; } if(key < this.data) { if(this.leftChild == null) { return false; } else { return leftChild.find(key); } } else { if(rightChild == null){ return false; } else { return rightChild.find(key); } } }