[英]How to write a recursive function using static variables
我正在嘗試編寫代碼以獲取猴子從(0,0)開始可訪問的點(x,y)的集合,以使每個點都滿足| x |。 + | y | <_limitSum。 我編寫了以下代碼,並使用了Coordinate類型的成員的靜態HashSet(此處未顯示),並編寫了遞歸方法AccessPositiveQuadrantCoordinates。 但是問題在於跨遞歸調用傳遞的HashSet的成員沒有反映在先前調用中添加的Coordinate成員。 有人可以幫助我如何通過對象引用來實現這一點嗎? 還有其他方法可以解決此問題嗎?
public class MonkeyCoordinates {
public static HashSet<Coordinate> _accessibleCoordinates = null;
private int _limitSum;
public MonkeyCoordinates(int limitSum) {
_limitSum = limitSum;
if (_accessibleCoordinates == null)
_accessibleCoordinates = new HashSet<Coordinate>();
}
public int GetAccessibleCoordinateCount() {
_accessibleCoordinates.clear();
Coordinate start = new Coordinate(0,0);
AccessPositiveQuadrantCoordinates(start);
return (_accessibleCoordinates.size() * 4);
}
private void AccessPositiveQuadrantCoordinates(Coordinate current) {
if (current.getCoordinateSum() > _limitSum) { return; }
System.out.println("debug: The set _accessibleCoordinates is ");
for (Coordinate c : _accessibleCoordinates) {
System.out.println("debug:" + c.getXValue() + " " + c.getYValue());
}
if (!_accessibleCoordinates.contains(current)) { _accessibleCoordinates.add(current); }
AccessPositiveQuadrantCoordinates(current.Move(Coordinate.Direction.East));
AccessPositiveQuadrantCoordinates(current.Move(Coordinate.Direction.North));
}
我會給所有可接受的答案要點。
謝謝你,Somnath
但是問題在於跨遞歸調用傳遞的HashSet的成員沒有反映在先前調用中添加的Coordinate成員。
我認為這不太可能。 我認為您的Coordinate
類很可能沒有適當地覆蓋equals
和hashCode
,這就是為什么該集合無法“查找”值的原因。
順便說一句,使用這樣的靜態變量對我來說似乎是個壞主意-為什么不在GetAccessibleCoordinateCount()
創建集合並將引用傳遞給AccessPositiveQuadrantCoordinates
,而后者又可以將其遞歸傳遞給遞歸調用?
(另一方面,我強烈建議您開始遵循Java命名約定...)
我看不到使字段_accessibleCoordinates
為非靜態的任何問題
並且您應該知道HashSet不能每次都保證相同的迭代順序,因此您最好為此使用LinkedList ...
關於通過引用,我發現這篇文章非常有用
根據您的操作,您將在每個遞歸調用中正確更新_accessibleCoordinates。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.