Факториальное значение Java изменяется, когда return не равен 1 - PullRequest
0 голосов
/ 07 ноября 2019

Если возвращение if condition - это что-то другое 1, тогда значение факториала меняется.

Как я понимаю, возврат - это способ остановить программу. Но как if statement return связан с factorial return оператором?

Вот условие if:

    if (value == 1) {
       // return 0 will cause the factorial return to multiple by 0.
       // return 2 will cause the factorial return 48.
        return 1;  
    }

Окончательный код:

public class test {

    public static void main(String[] args) {
        System.out.println(factorial(4));

    }

    private static int factorial(int value) {

        if (value == 1) {
           // return 0 will cause the factorial return to multiple by 0.
           // return 2 will cause the factorial return 48.
            return 1;  
        }

        return factorial(value - 1) * value;

    }

}

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Я полагаю, что у вас есть некоторая путаница, связанная с концепцией рекурсии.

Давайте рассмотрим выполнение вашего кода за исполнением на примере значения = 3.

Вывод должен быть 3! = 3 * 2 * 1 = 6

Теперь давайте подумаем, как вы будете кодировать работу и почему она должна возвращать 1 в блоке If.

1-й факториал выполнения (3) => условие не выполнится,поэтому он вернет факториал (2) * 3;

2-е условие факториала выполнения (2) => не выполнится, поэтому он вернет факториал (1) * 2;

3-й факториал выполнения (1) => условие пройдет, поэтому оно вернет 1;

Теперь подставим эти значения, указанные выше,

factorial (1) = 1,

factorial (2)= 1 * 2

и factorial (3) = 1 * 2 * 3

Итак, это то, что мы хотели.

Теперь представьте, что вы вернете любое другое, кроме 1,тогда выход изменится

отл. если мы вернем 2, то 2 * 2 * 3 (не 3!)

Надеюсь, это поможет вам.

0 голосов
/ 07 ноября 2019

Если вы возвращаете 2 для factorial(1) (что неверно),

вы возвращаете factorial(1) * 2 == 4 для factorial(2)

и возвращаете factorial(2) * 3 == 12 для factorial(3)

и вы возвращаете factorial(3) * 4 == 48 для factorial(4).

Как видите, если вы вернете неправильное значение в конце рекурсии, вы получите общий неверный результат.

Поскольку factorial(1) равно 1, вы должны вернуть 1, когда value == 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...