Java Факториал Программа - PullRequest
       14

Java Факториал Программа

0 голосов
/ 24 февраля 2019

Я не могу понять, что мне не хватает в моем коде.Любая помощь будет оценена.Я новичок в программировании и просто занимаюсь практикой.Спасибо!

import java.util.Scanner;
import java.lang.Math;

public class Factorial {

    public static Scanner sc;

    public Factorial() {
    }

    int factorial(int n) {
        for (int j = n - 1; j > 0; j--) {
            int factorial = factorial(0) * j;
        }
        return factorial(0);
    }

    public static void main(String[] args) {

        System.out.print("Enter a number to find its factorial: ");
        sc = new Scanner(System.in);
        int myNumber = sc.nextInt();

        Factorial myFactorial = new Factorial();
        System.out.println(myFactorial.factorial(myNumber));
    }
}

Ответы [ 5 ]

0 голосов
/ 24 февраля 2019

Замените этот код в вашем коде:

 int factorial=1;
int factorial(int n) {
   for (int j = 1; j <= n; j++) {
       factorial = factorial * j;
    }
    return factorial;
}
0 голосов
/ 24 февраля 2019

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

Для рекурсивного поиска факториала

Математически

n!= nx (n - 1)! , а базовый вариант равен 0!= 1

На Java

// somewhere in your class
int factorial(int n) {
   // base case
   if (n == 0) return 1;

   // recursion
   return n * factorial(n-1);
}
0 голосов
/ 24 февраля 2019

Ну .... независимо от того, что вы указываете на n, вы всегда возвращаете factorial(0), что в итоге создает бесконечный цикл вызовов factorial, поэтому я предполагаю, что ваш стек забивается и возникает ошибка переполнения стека,право?Я думаю, что здесь ошибка.

0 голосов
/ 24 февраля 2019

В рекурсивном режиме: `

import java.util.Scanner;
import java.lang.Math;




class Factorial {

public static Scanner sc;


public static int factorial(int n) {
    if(n==0)return 1;
    return n*factorial(n-1);
}

public static void main(String[] args) {

    System.out.print("Enter a number to find its factorial: ");
    sc = new Scanner(System.in);
    int myNumber = sc.nextInt();

    //Factorial myFactorial = new Factorial();
    System.out.println(factorial(myNumber));
}
}`
0 голосов
/ 24 февраля 2019

Вам не хватает углового футляра (для 0):

int factorial(int n) {
    if (n == 0) return 1;
    for (int j = n - 1; j > 0; j--) {
        int factorial = factorial(0) * j;
    }
    return factorial(0);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...