2014-12-05 2 views
-1

Использование C++ для определения факториала достаточно прост. Чтобы напечатать значения, приближающиеся (если факториал равен 5) ... 1 * 2, * 3, * 4 * 5 тоже не проблема - как я думаю, я сделал ниже. Но то, что я с трудом делаю, говорит, покажите мне 5 * 4, затем значение * 3, затем значение * 2 и т. Д. Я хочу иметь возможность печатать данные, идущие вниз, и я не могу понять, как это понять.Рекурсивно печатать Factorial values ​​в порядке убывания товара?

#include <iostream> 
using namespace std; 

int factorial(int n); 

int main() 
{ 
    int number; 

    cout << "Enter an integer value "; 
    cin >> number; 

    cout << "The factorial of " << number << " is "; 
    cout << factorial(number) << endl; 
} 

int factorial(int n) 
{ 
    if (n == 0) 
     return 1;     // Base case 
    else 
    { 
     n = n * factorial(n - 1); // Recursive case 
     cout << " going up" << n << " "; 
     return n; 
    } 
} 

Есть еще несколько сообщений, но я не нашел одного, спрашивающего то же самое. Желаемые результаты: 20 60 120 Текущие результаты 1 2 6 24 120 Обратите внимание: Спасибо.

+3

Переместить 'cout <<' на одну строку вверх. – Ryan

+0

Пожалуйста, отредактируйте свое сообщение, чтобы включить результаты, которые вы ожидаете, и результаты, которые вы получаете. Благодарю. –

+0

@YelizavetaYR Помог ли ответ? –

ответ

2

Просто измените, где вы печатаете значение

else 
    { 
     n = n * factorial(n - 1); // Recursive case 
     cout << " going up" << n << " "; 
     return n; 
    } 

в

else 
    { 
     cout << " going down" << n << " ";  
     n = n * factorial(n - 1); // Recursive case 
     return n; 
    } 

Значение выше напечатает 5 4 3 2 1 но если вы хотите что-то вроде

5 20 60 ... 

Чем вы должны изменить рекурсивное определение немного.

#include<iostream> 

using namespace std; 
int factorial(int n,int temp); 
int main() 
{ 
    int number; 

    cout << "Enter an integer value "; 
    cin >> number; 

    cout << "The factorial of " << number << " is "; 
    cout << factorial(number,1) << endl; 
} 

int factorial(int n,int temp) 
{ 
    if (n == 0) 
     return temp;     // Base case 
    else 
    { 
     cout << " going down" << n * temp << " "; 
     factorial(n - 1,n*temp); // Recursive case 
     //return n; 
    } 
} 
+0

к вашему заявлению выше, чтобы напечатать 5 4 3 2 1 Я смог обойтись без проблем. Я хотел напечатать 20 60 120. (каким будет фактическое умножение каждого набора значений). Я хотел бы исключить 5 - мы просто хотим умножить значения. – YelizavetaYR

+0

, чем вы можете начать с другого вызова, например, если вы хотите на 5! чем call factorial (n-1, n) –

+0

Это здорово! Спасибо. – YelizavetaYR

Смежные вопросы