2013-05-03 3 views
2

Я только начал писать рекурсивные методы. Один из моих методов для полномочий десяти дает мне недостающую ошибку типа возврата.Отсутствует ошибка возврата Ошибка

public static double powerOfTen(int n) 
{ 

if (n == 0) 
    return 1; 

if(n > 0) 
    return (10 * powerOfTen(n - 1)); 

if(n < 0) 
    return (1/powerOfTen(n - 1)); 

} 

Я довольно новый, поэтому любое объяснение будет оценено.

////// Редактировать Это сработало для меня, для отрицательной и положительной силы десяти. Спасибо за вашу помощь: D

public static double powerOfTen(int n) 
{ 

if(n > 0) 
    return (10 * powerOfTen(n - 1)); 

if(n < 0) 
    return (1/powerOfTen((-1)*(n))); 


return 1; 

} 
+0

Возможная ошибка в последнем 'if': не должна включать в себя' n + 1', а не 'n - 1'? – michaelb958

+0

if (n <0) \t return (1/powerOfTen ((-1) * (n))); \t Это сработало для меня – Lsooties

+0

Это сработало. ('(-1) * (n)' также может быть записано как '-n'.) – michaelb958

ответ

3

Try:

public static double powerOfTen(int n) 
{ 
if(n > 0) 
    return (10 * powerOfTen(n - 1)); 

if(n < 0) 
    return (1/powerOfTen(n - 1)); 

    return 1; 
} 

компилятор считает, что это не может гарантировать, что всегда есть значение возвращается, так как все возвращается в if отчетности. Действовать таким образом отнимает путаницу

0

Пожалуйста, измените код:

Дело ясно: Если это утверждение false, я не хочу, чтобы функция продолжать, так I'l return который ты пропустил.

public static double powerOfTen(int n) 
    { 
    if(n>1){    //check for positive n value 
    if(n > 0){ 
     return (10 * powerOfTen(n - 1)); 
    }else if(n < 0){ 
     return (1/powerOfTen(n - 1)); 
    } 
    } 
     return something; //here error 
    } 

В качестве примечания для наилучшей практики, пожалуйста, используйте { } между if else statements.

+0

Хорошо скомпилировано в порядке. Я провел небольшой тест в основном. Но я получаю ошибку переполнения стека, когда я добавляю отрицательное целое число для n. Кажется, он бесконечно зацикливается. Помогите? – Lsooties

+0

Итак, пожалуйста, сначала проверьте погоду n> 1 или нет. Если n> 1, то только это все, чтобы сделать оставшийся материал. Обновленный мой ответ. –

+0

Это решило переполнение, но метод возвращает 1.0 для любого отрицательного целого числа, прошедшего через. – Lsooties

1

Компилятор не делает тест диапазона покрытия, так что не замечает, что ваш код охватывает все возможные значения Int N, и, следовательно, ошибка.

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