Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ELDQS
10 / 10 / 1
Регистрация: 07.04.2011
Сообщений: 561
Записей в блоге: 1
#1

рекурсии вычислять факториал - C++

27.05.2011, 19:56. Просмотров 697. Ответов 7
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
double fact (int c, int b, double * masi []);
int main ()
{
    int c;
    int b;
    cout << "Vvedi  chislo";
    cin >> c;
    b=c;
    double * mas = new double mass[c];
    mas[0] = mas[1] = 1;
    cout << (fact(c, b, *mas));
    cin >> c;
}
int fact (int c, int b, double * mas[])
{
    if c>b
       return mas c;
    
    mas[c] =c*mas[c-1];
    fact (c++, b, mas);
}
ощибка такая
expected `,' or `;' before "mass"
че там вроде все правильно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2011, 19:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос рекурсии вычислять факториал (C++):

Программа должна вычислять значение функции exp(x) действительного аргумента x с точностью ε с использованием рекурсии. - C++
Построить рекурсивный алгоритм, записать алгоритм в виде блок-схемы и на алгоритмическом языке. Программа должна вычислять значение...

Найти факториал с помощью рекурсии - C++
Помогите написать программу с комментариями (Рекурсия) Найти факториал указанного числа.

Нужно написать программу которая будет вычислять факториал. В нете много подобного, но хорошего не увидел. Может у кого код завалялся. - C++
Помогите написать программу которая будет вычислять факториал. В нете много подобного, но хорошего не увидел. Может у кого код завалялся.

Как вычислять факториал таких больших чисел, как 1000 - C++
подскажите есть ли возможность написать программу которая считает факториал таких больших чисел как 1000, не используя метод использующий...

Описать рекурсивные функции вещественного типа, вычисляющие факториал и двойной факториал заданного числа - C++
Описать рекурсивные функции Fact(N) и Fact2(N) вещественного типа, вычисляющие значения факториала N! и двойного факториала N!!...

вычислять площадь - C++
Напишите программу, которая будет вычислять площадь поверхности данного прямоугольного параллелепипеда (ширина, высота и длина будет...

7
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
27.05.2011, 19:58 #2
C++
1
if (c>b)
Вообще непонятен ваш код... Зачем тут массив даблов
Самая простая реализация
C++
1
2
3
4
int F(int n){
  if (n<2)  return 1;
         else return F(n-1)*n;
}
1
ELDQS
10 / 10 / 1
Регистрация: 07.04.2011
Сообщений: 561
Записей в блоге: 1
27.05.2011, 20:04  [ТС] #3
ну как зачем там же не маленькие числа получатся
чем больше число

Добавлено через 56 секунд
ухты так просто классно спасибо
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
27.05.2011, 20:07 #4
Как-то сомневаюсь я, что ваша программа посчитает длинный факториал=\
Моя реализация длинного факториала:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <iostream>
#include <sstream>
#include <vector>
#define base 1000000000
void writelong(std::vector<int> vec){
    printf ("%d", vec.empty() ? 0 : vec.back());
    for (int i=(int)vec.size()-2; i>=0; --i)
        printf ("%09d", vec[i]);
}
std::vector<int> smult(std::vector<int> a, int b){
    int carry = 0;
    for (size_t i=0; i<a.size() || carry; ++i) {
        if (i == a.size())
            a.push_back (0);
        long long cur = carry + a[i] * 1ll * b;
        a[i] = int (cur % base);
        carry = int (cur / base);
    }
    while (a.size() > 1 && a.back() == 0)
        a.pop_back();
    return a;
}
int main(){
    int b;
    std::cin >> b;
    std::vector<int> a(1,1);
    for (int i = 1; i <= b; i++)
        a=smult(a,i);
    writelong(a);
    return 0;
}
Нерекурсивная правда...
Зато 100000! (ответ полмегабайта xD) за 3 минуты считает
0
AndrewPa
1 / 1 / 1
Регистрация: 19.05.2011
Сообщений: 5
27.05.2011, 20:07 #5
Цитата Сообщение от ELDQS Посмотреть сообщение
if c>b return mas c;
что вы здесь хотите вернуть? запись mas c - непонятна
0
ELDQS
10 / 10 / 1
Регистрация: 07.04.2011
Сообщений: 561
Записей в блоге: 1
27.05.2011, 20:18  [ТС] #6
Цитата Сообщение от diagon Посмотреть сообщение
Как-то сомневаюсь я, что ваша программа посчитает длинный факториал=\
Моя реализация длинного факториала:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <iostream>
#include <sstream>
#include <vector>
#define base 1000000000
void writelong(std::vector<int> vec){
    printf ("%d", vec.empty() ? 0 : vec.back());
    for (int i=(int)vec.size()-2; i>=0; --i)
        printf ("%09d", vec[i]);
}
std::vector<int> smult(std::vector<int> a, int b){
    int carry = 0;
    for (size_t i=0; i<a.size() || carry; ++i) {
        if (i == a.size())
            a.push_back (0);
        long long cur = carry + a[i] * 1ll * b;
        a[i] = int (cur % base);
        carry = int (cur / base);
    }
    while (a.size() > 1 && a.back() == 0)
        a.pop_back();
    return a;
}
int main(){
    int b;
    std::cin >> b;
    std::vector<int> a(1,1);
    for (int i = 1; i <= b; i++)
        a=smult(a,i);
    writelong(a);
    return 0;
}
Нерекурсивная правда...
Зато 100000! (ответ полмегабайта xD) за 3 минуты считает
я этот код пока не пойму)))
согласен мой код не совсем непонятный сам не понял

Добавлено через 2 минуты
Цитата Сообщение от AndrewPa Посмотреть сообщение
что вы здесь хотите вернуть? запись mas c - непонятна
сам незнаю
0
AndrewPa
1 / 1 / 1
Регистрация: 19.05.2011
Сообщений: 5
27.05.2011, 20:25 #7
Цитата Сообщение от ELDQS Посмотреть сообщение
ощибка такая
expected `,' or `;' before "mass"
че там вроде все правильно
Ругается именно на кусок кода, где написано "return mas c;"
mas - массив, насколько я понимаю, а с - индекс массива...а так просто 2 переменные не связанные друг с другом
0
ELDQS
10 / 10 / 1
Регистрация: 07.04.2011
Сообщений: 561
Записей в блоге: 1
27.05.2011, 20:32  [ТС] #8
ввел в ваш код 100000 вот долго зато ответ длиииииииииииннннныый

Добавлено через 3 минуты
Цитата Сообщение от AndrewPa Посмотреть сообщение
Ругается именно на кусок кода, где написано "return mas c;"
mas - массив, насколько я понимаю, а с - индекс массива...а так просто 2 переменные не связанные друг с другом
а красная полоса была на
double * mas = new double mass[c];
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2011, 20:32
Привет! Вот еще темы с ответами:

Как вычислять выражение с заданной точностью? - C++
Хотел до уточнить, как например вычислять какое-то выражение с заданной точностью. Больше всего меня пугает именно заданная точностью....

Функция должна вычислять рандомное значение от a до b - C++
Создать 2 функции, первая должна вычислять рандомное значение от a до b( a и b мы должны ввести сами),это значение должно выводится в...

По данным значениям аргументов a и b вычислять значение функции f(a,b) - C++
помогите!!! По данным значениям аргументов a и b вычислять значение функции f(a,b). При организации вычисления необходимо выявить сходные...

Макрос, который будет вычислять среднее из трех чисел - C++
Ребятки, а как мне написать макрос, который будет вычислять среднее из a,b и c?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
27.05.2011, 20:32
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru