2015-11-24 97 views
0

我想使用遞歸函數來確定網格中值的最大可能組合。我的一個功能是作用很奇怪的是,給我的錯誤:奇怪的錯誤 - 對象轉爲零

warning: could not load any Objective-C class information. This will significantly reduce the quality of type information available. 

我的函數代碼如下:

-(int)pattern4XBottomAtTile:(Tile *)t1 TileTwo: (Tile *) t2{ 
//base case 
if(t1.x == t2.x && t1.y == t2.y){ 
    return t2.value; 
} 
//move 1 
if((t1.y < 4) && (t1.y == t2.y) && (abs(t2.x-t1.x) == 2)){ 
    return t1.value + [self pattern4XBottomAtTile:t1.bottom TileTwo:t2]; 
} 

//move 2 
if((t1.x-t2.x == 2)&&(t1.y - t2.y > 0)){ 
    return t1.value + [self pattern4XBottomAtTile:t1.left TileTwo:t2]; 
} 
if((t1.x-t2.x == -2)&&(t1.y - t2.y > 0)){ 
    return t1.value + [self pattern4XBottomAtTile:t1.right TileTwo:t2]; 
} 

//move 3 
if((abs(t2.y-t1.y) == 1)&&(abs(t2.x-t1.x) == 1)){ 
    return t1.value + [self pattern4XBottomAtTile:t1.top TileTwo:t2]; 
} 

//move 4 
if((t1.y == t2.y)&&(t1.x-t2.x == 1)){ 
    return t1.value + [self pattern4XBottomAtTile:t1.left TileTwo:t2]; 
} 
if((t1.y == t2.y)&&(t1.x-t2.x == -1)){ 
    return t1.value + [self pattern4XBottomAtTile:t1.right TileTwo:t2]; 
} 
return 0; 

}

,我迄今爲止發現的問題,通過使用多個斷點,是對象正在傳遞給函數,並在零時刻後。

在方法的開始斷點顯示:

enter image description here enter image description here

當我運行的功能,但是,我會見了錯誤: enter image description here enter image description here

在我的屏幕左側有一些可能相關的信息。 enter image description here

t2和t1的值都是以#4開始,nil在#5開始變爲零。 直到大約40264時,值纔再次發生變化,其中t1更改爲平鋪的地址,然後再次更改爲40265.

我對我的問題所在的位置感到非常困惑。我的遞歸代碼是從我的朋友提供的可用的java函數轉換而來的,所以我對這一切都有點失落。任何幫助將不勝感激。

回答

2

如果你有這麼多的堆棧幀,你可能用完了堆棧空間(又名內存)。你需要一個更好的算法,或者你有一個bug,並且遞歸不是在它終止時終止。

+0

100%stackoverflow :) 39704項目在堆棧中! –

+0

在我的函數週圍放置「if(t1!= nil && t2!= nil){}」,錯誤消失。現在我必須弄清楚發生了什麼事情!謝謝 – ecatalano