Я пытаюсь написать метод, который выполняет следующее:
public class GridCounting {
/** Returns the total number of possible routes (paths) from
* (x,y) to (tx,ty).
* There are only three valid kinds of moves:
* Increment x by one.
* Increment x by two.
* Increment y by one.
*
* Hint: You'll need to two base cases.
*/
public static int count(int x,int y, int tx, int ty) {
if (x==tx && y==ty)
return 1;
if (x>tx || y>ty)
return 0;
if (x<tx)
return 1 + count(x+1, y, tx, ty);
if (x<tx) //if x is still less, then we can do another move
return 1 + count(x+2, y, tx, ty);
if (y<ty){
return 1 + count(x, y+1, tx, ty);
}
return 0;
}
}
Проблема, с которой я сталкиваюсь, заключается в том, что меня всегда отключает +1.Он ожидает 4, но я даю его 5. Запутывающая часть в том, что если я добавлю счет функции (10,15,10,15), то это все равно будет считаться как 1 ход.Я не знаю, как объяснить это.
Также y ++, тогда x ++ считается за 1 ход, а x ++, затем y ++ - как еще один ход.Редактировать: Фиксированный код:
public static int count(int x,int y, int tx, int ty) {
if (x==tx && y==ty)
return 1;
if (x>tx || y>ty)
return 0;
if (x<tx)
return count(x+1, y, tx, ty) + count(x+2, y, tx, ty) + count(x,y+1,tx,ty);
if (y<ty) {
return count(x, y+1, tx, ty); // what does this do?
}
return 0;
}