2015-06-14 6 views
1

Я пытаюсь сделать рекурсивную функцию, которая должна возвращать сумму цифр. Функция должна иметь только один аргумент. Пока у меня это есть;сумма цифр через рекурсию

public int sumDigits(int n) { 
    if(n%10 == n) // last digit remains 
     return n; 

    else{ 
     int rightdigit; 
     rightdigit = n%10; // taking out the right most digit 
     return rightdigit + (n/10); // adding it to everything on left 
    } 
} 

Функция работает для некоторых значений, в частности двухзначных чисел. Но он дает действительно нечетные значения для некоторых чисел, таких как 730, которые составляют 73, когда это должно быть 10.

Я работал над этим на бумаге, но не могу понять, где я иду не так. Любая помощь приветствуется.

+0

это не рекурсия, он не называет себя – Marged

ответ

2

Вы на самом деле не рекурсии. Вы установили базовый регистр, но при рекурсивном решении проблемы вы должны иметь код в пределах, который вызывает функцию.

Так что вам не хватает строки, которую звонитsumDigits, с меньшим аргументом.

Рассмотрим две важные части рекурсивного soutlion:

  1. базового сценария. Это конец рекурсии, после чего ваши рекурсии начнут возвращаться, в вашем случае создавая сумму.
  2. Рекурсия : ваша рекурсивная функция будет называть себя с другим аргументом, как правило, меньшим объемом проблемы.

Обратите внимание, что ваша проблема подходит для этого достаточно хорошо: у вас есть 2 случая в if/else. Ваш базовый футляр настроен красиво, теперь в другой ветке вы захотите на самом деле вернуться. Вам должно быть очень очевидно, где поставить звонок на sumDigits.

+0

Это была очень глупая ошибка! благодаря –

1

Ваш метод не является рекурсивным. Он должен назвать себя в последней части:

return rightdigit + sumDigits(n/10); 

Это добавляет правую цифру к рекурсивно суммированному числу самой левой цифры.

+0

проклятый, очень глупый! –

1

Вы забыли свой звонок по номеру sumDigits(). Измените эту строку:

return rightdigit + (n/10); 

к этому:

return rightdigit + sumDigits(n/10); 
+0

Yup. Спасибо большое :) –