2013-08-27 3 views
-4

Я пишу рекурсивный метод с классами. Я не получаю вывод, который я хочу вообще.Рекурсивная функция с объектами?

public Result foo(cell, Result R) 
{ 
    grid = createGrid(cell) 
    if (grid.empty) 
     return; 
    else 
    { 
     // find best 2 cell. 
     best_cells[] = findBestCell(grid); 

     // saves best R found so far. 
     R = updateResult(R); 

     // call foo(best_cells[]); 
     for (every cell in best_cells[]) 
      return foo(best_cells[i], R); 
    } 
    return R; 
} 

Метод термиты, когда условие if(grid.empty) находится в первый раз true. Он не подходит для других ячеек! Почему это? Мне не хватает возвращения?

Обновление 1: Спасибо Томас за заметки. Я изменил код на:

public Result foo(cell, Result R) 
{ 
    grid = createGrid(cell) 
    if (grid.empty) 
     return R; 
    else 
    { 
     // find best 2 cell. 
     best_cells[] = findBestCell(grid); 

     // saves best R found so far. 
     R = updateResult(R); 

     // call foo(best_cells[]); 
     for (every cell in best_cells[]) 
     { 
      Result temp_R = foo(best_cells[i], R); 
      if(temp_R.error < R.error) 
       R = temp_R; 
      } 

    } 
    return R; 
} 

Я проверю его, а затем вернусь к ребятам.

Обновление 2: предыдущий код работает нормально. Первый вход R не должен быть равен == null. В противном случае появится NPE.

Спасибо Томас столько! Спасибо, ребята, за комментарии ура :)

+0

Первый возврат должен возвращать некоторый объект типа 'Result'. – npinti

+1

Что это за код? Предоставьте реальный компилируемый Java-код. – BobTheBuilder

+0

Если это так, то, возможно, ваш createGrid не делает то, что вы ожидаете от этого. Пожалуйста, изучите его. –

ответ

0

Без дополнительной информации и компилируемого кода трудно определить, где находится ваша ошибка. Но вот несколько советов:

if (grid.empty) 
    return; 

Что должно быть возвращено здесь? R прошел как параметр?

for (every cell in best_cells[]) 
    return foo(best_cells[i], R); 

Это остановится после первой итерации (best_cells[1] и выше никогда не будет рассматриваться). Думаю, вам нужно каким-то образом проверить результат foo(best_cells[i], R), а затем решить, следует ли его вернуть или продолжить итерацию.

В качестве общего замечания: если вы попросите нас найти ошибки в вашем коде (а не просто изучить некоторый алгоритм), вы должны опубликовать этот код вместо некоторого псевдокода. В противном случае практически невозможно обнаружить актуальную ошибку.

Другое примечание: знаете ли вы, как использовать отладчик? Если да, попробуйте проверить, что делает ваш код и что вы ожидаете от него. Скорее всего, вы очень быстро найдете ту часть, где все идет не так.

+0

Теперь я получаю null в результатах :(! – user2720596

+0

@ user2720596 ну, что говорит вам ваш отладчик? Как я уже сказал, без фактического кода почти невозможно помочь, чем дать несколько советов. – Thomas

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