2015-11-25 3 views
0

Это может идти только на восток и на юг. Например, 1 блок на восток и 2 блоков к югу, то она имеет общие пути способа являются: 1 блок на восток и 2 блоков на юг, 1 блок на восток, затем 2 блоков к югу 1 блок на юг, затем 1 блок на восток, а затем 1 блок юг 2 блока на юг, затем 1 блок востокРекурсивный метод Java. Рассчитайте путь по улицам.

Как насчет 6 блоков на восток, в 6 кварталах на юг.

Мой код являются:

public class Path{ 
    public static int numPaths(int east, int south){ 

     if((east==1)&&(south==1)){ 
      return 2; 
     } 
     if ((east==1)&&(south==2)){ 
      return 3; 
     } 
     else{ 
     return (numPaths(east,south-1)+numPaths(south-1,east)); 
     } 

    } 
    public static void main(String[] args) { 
     System.out.println(numPaths(6,6)); 
    } 
} 

(Однако это не работает, он жалуется на мой код на последней строке метода, я просто не знаю, как это исправить.) Я хочу знать причину, а не ответ.

+0

Пожалуйста, переформатируйте код для лучшей читаемости и приложите сообщение об ошибке. – maxhb

+0

@maxhb Спасибо, ошибка: Исключение в потоке "главный" java.lang.StackOverflowError \t в Path.numPaths (Path.java:12) \t в Path.numPaths (Path.java:12) –

ответ

1

Во-первых, вам действительно нужно связать if с помощью else if.

Реальная проблема, однако, в том, что у вас нет проверок, удостоверяющих, что значения никогда не подпадают под 1. Из-за этого вы получаете бесконечную рекурсию с меньшими и меньшими значениями.

Добавить if блок проверки этого:

if ((east==1) && (south==1)){ 
    return 2; 
} else if ((east==1) && (south==2)){ 
    return 3; 
} else if ((east==0) || (south==0)) { 
    return 0; 
} else { 
    return (numPaths(east,south-1)+numPaths(south-1,east)); 
} 
+0

Замечательно! (Y) Он печатает 378! (Y) –

+0

ОН МОЙ БОГ! Причина в том, что я не добавил ZERO !!!! –

+0

@ Keppil: тайный тестовый чехол был провален –

0

Исключение: java.lang.StackOverflowError \

Где хвост рекурсии. Я имею в виду, что я не нахожу, что рекурсия заканчивается где угодно. Это if(east == 0 || south ==0){return value;} не требуется

Смежные вопросы