我正在尝试使用递归函数来确定网格中最大可能的值组合。我的一个功能是非常奇怪,给我一个错误:
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;
}
到目前为止,我通过使用多个断点找到的问题是,对象被传递给函数,并且稍后会变为零。
方法开头的断点显示:
t2和t1的值在#4处开始为nil,并且在#5处t1变为nil。 直到大约40264,这些值才会再次改变,其中t1更改为图块的地址,然后在40265处再次更改。
我对我的问题所处的位置感到非常困惑。我的递归代码是从我朋友提供的工作java函数转换而来的,所以我对这一切都有些失落。任何帮助将不胜感激。
答案 0 :(得分:2)
如果你有那么多堆栈帧,你可能用完了堆栈空间(也就是内存)。你需要一个更好的算法,或者你有一个错误,并且递归时不会终止。