2016-04-06 4 views
0

У меня есть проблема, чтобы понять, как рассчитывается параметр рекурсии, который объясняется в этом вопросе Java recursion and integer double digit. Внедренный код выглядит следующим образом:Объяснение рекурсии двухзначных чисел

public static int doubleDigits(int i){ 

     if (i == 0){ 
      return 0; 
     }else{ 
      return doubleDigits(i/10) * 100 + (i % 10) * 10 + i % 10; 
     } 


} 

С результатом, если INT I = 1234:

11223344 

Я пытался отладки кода, но возникли трудности, чтобы понять, что происходит.

Я проверил множество примеров, и я могу понять большинство случаев, как работает рекурсия, но не в этом случае.

Я хотел бы получить легко объяснимое объяснение того, как рекурсия работает в этом случае.

+0

'doubleDigits' вызывается рекурсивно, пока не встретит условие перерыва. –

+4

Пользователь карандаш и бумага, установите 'i = 12' и начните рисовать вещи. Этот метод поможет вам понять рекурсию в 100% случаев. – Maroun

+1

Я попробую с карандашом и бумагой, звучит как хорошая идея. Ха-ха. – codeme

ответ

3

Рекурсия всегда работает, решая меньшую проблему, а затем добавляя к этому решению (или объединяя меньшие решения).

doubleDigits(i/10) 

удваивает цифры номера, имеющие все цифры исходного номера, кроме последнего.

Затем оно умножается на 100, чтобы освободить место для оставшихся двух цифр, которые добавляются (i % 10) * 10 + i % 10. i % 10 - последняя цифра номера входа, и она добавляется дважды к номеру выхода.

doubleDigits(1234/10) * 100 + (i % 10) * 10 + i % 10 

112233     * 100 +  4 * 10 +  4   = 11223344 
+0

приятное объяснение, спасибо. – codeme

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