Таким образом, предполагая, что n
вход вы принимаете является отправным знаменатель наименьшей фракции вы хотите добавить ...
(к примеру, учитывая n = 10
, вы хотите добавить 1
через 1/10
)
Затем вам нужно настроить метод так, что при вызове fact(10)
, он собирается вернуть сумму 1/10
плюс результат fact(9)
, или в более общем плане, 1/n + fact(1/n-1);
Итак, вы ищете что-то вроде это:
public double fact(int n) {
if (n < 0) {
return 0.0;
} else if (n == 0) {
return 1.0;
} else {
return (1.0/n + fact(n-1))
}
}
Также обратите внимание на изменения в базовых корпусах. Когда n < 0
, мы просто return 0.0
, потому что, если я правильно помню, факториал любого отрицательного числа всегда равен 0, правильно?
Между тем, базовый корпус должен быть n==0
, а не n == 1
. Ваша серия начинается с 1 + 1/1
. Обратите внимание, что 1
не является 1/0
или 1/nothing
, это всего лишь 1/1
. Мы не можем вернуть 1/n
, если n
- 0
. Для правильного вычисления серии мы должны добавить первый возврат первого элемента серии в случае n = 0
.
И имейте в виду, как и все рекурсивные функции, очень большие значения n
вызовет переполнение стека.
http://en.wikipedia.org/wiki/Factorial См определение по рекуррентным соотношением. – zch
В чем вопрос? – superuser
@superuser "нужно написать рекурсивный метод для вычисления следующих рядов: e = 1 + 1/1! +1/2! +1/3! +." – Woot4Moo