рекурсивная функция, которая возвращает факториал C ++ - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь решить следующее упражнение из книги C ++ Primer Plus.

Определить рекурсивную функцию, которая принимает целочисленный аргумент и возвращает факториал этого аргумента. Напомним, что 3 факториала, написано 3 !, равно 3 × 2 !, и так далее, с 0! определяется как 1. В общем случае, если n больше нуля, n! = n * (n - 1) !. Проверьте свою функцию в программе который использует цикл, чтобы позволить пользователю вводить различные значения, для которых программа сообщает факториал.

Я написал код, который входит в main ().

#include <iostream>
using namespace std;

int factorial(int n);


int main()
{
    int number= 0;
    cout<<"Enter a number(0 to quit): ";
    while (cin >> number && number! = 0)
    {
        cout<< "Here is the factorial of the number: "<< factorial (number) << ". \n"
        "Enter next number(0 to quit): ";
    }


    return 0;
}

Теперь я не могу придумать правильное объявление рекурсивной функции. Может ли кто-нибудь помочь, написав самое простое (для новичка в программировании) понимание объявления функции для этого упражнения?

Ответы [ 3 ]

0 голосов
/ 07 мая 2018

При разработке рекурсивного алгоритма для вычисления факториала любого числа, мы должны сначала определить базовый случай , который является частью вычисления, которое мы можем решить без рекурсии. Это тот случай, когда n = 0 затем factorial(n) = 1.

Это говорит о том, как решить проблему, когда n равно 0, но что мы делаем, когда n больше 0? Это рекурсивный случай , или часть проблемы, которую мы используем для решения рекурсии. If n > 0, then factorial(n) = n * factorial(n-1). Это говорит о том, что если n больше 0, факториал n в n раз больше факториала n-1.

int factorial(int n)
{
    if (n == 0)
        return 1; // base case
    else
        return n * factorial(n-1); // recursive case
}
0 голосов
/ 01 сентября 2018

Вы можете использовать очень короткую функцию следующим образом, но она так же, как ответ, предоставленный @ superPhreshHackerKid

int factorial(int n){
    if (n > 0)
        return n * factorial(n-1);
    return 1;
}

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

0 голосов
/ 07 мая 2018

Я бы сделал что-то вроде:

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