Начал гуглить о рекурсии. Вроде сама идея понятна и т.д.. Но вот наткунся на пример который никак немогу понять, а именно:
class Factorial {
// рекурсивный метод
int fact(int n) {
int result;
if (n == 1)
return 1;
result = fact(n - 1) * n;
return result;
}
}
Factorial f = new Factorial();
// получим число, введенное пользователем
int usernumber = Integer.valueOf(editResult.getText().toString());
// вычисляем факториал и выводим результат в текстовой метке
textViewInfo.setText("Факториал " + usernumber + " равен " + f.fact(usernumber));
Вывод:
Факториал 3 равен 6
Факториал 4 равен 24
Факториал 5 равен 120 и т.д.
То что метод fact вызывает сам себя пока не дойдет до 1 понятно, но по идее после этого переменной result должно присвоиться занчение 2 и все. Но нет, после этого каким то волшебным образом значение переменной n увеличиваеться постепенно на 1. package com.javarush.task.task15.task1531;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigDecimal;
/*
Факториал
*/
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int input = Integer.parseInt(reader.readLine());
reader.close();
System.out.println(factorial(input));
}
public static String factorial(int n) {
if(n<=0){
return 0+"";
}
else {
int o = 1;
for (int y = 1; y < n; y++) {
o = y * o;
}
o = o * n;
return o + "";
}
}
}