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

Хвостовая рекурсия - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Контур пятиконечной звезды в программе Dev C++ 5.4.2 http://www.cyberforum.ru/cpp-beginners/thread919104.html
Здравствуйте, помогите пожалуйста сделать задание: нарисовать контур пятиконечной звезды средствами языка с++ Только нужно работать именно с новыми компиляторами (как Dev C++ 5.4.2) Заранее спасибо!
C++ TRY/CATCH Здравствуйте! У меня есть: MASS; для простоты пояснения, x=rand();y=rand(),znacheniye=rand(); Как игнорировать ошибки доступа? TRY{MASS=znacheniye;} catch(...){} http://www.cyberforum.ru/cpp-beginners/thread919100.html
C++ функция удаления и добавления элементов. что не так с програмой?
#include <iostream> using namespace std; struct node{ double a; double b; node *next;}; node *head= NULL; node *p, *tail; void add(int n){ int i;
C++ Ошибки в коде, Borland C++ 3.1
Добрый день! Подскажите пожалуйста, в коде 2 ошибки, не понимаю как их исправить. #include <iostream.h> #include <iomanip.h> #include <stdlib.h> #include <time.h> const int size = 20; const int hor = 10, ver = size; void bucketSort(int);
C++ Как то сложно написана программа HelloWorld http://www.cyberforum.ru/cpp-beginners/thread919066.html
В Dev-C++ увидел пример... #include <iostream> int main(int argc, char** argv) { std::cout << "Hello world!\n"; return 0; } не могли бы разъяснить мне этот код) желательно написать тему, чтобы узнать поподробней о этом)
C++ Второй способ отсева элементов из массива? День добрый! Год назад сдал курсовую работу на тему "Отсев элементов из заданного массива". На C++. В этом году мне дали задание по практике сделать тоже самое, только двумя алгоритмами. Суть курсовой следующая: Цель данной работы – создать программу, которая удаляет в заданном массиве Х(n) «лишние» (кроме первого) элементы так, чтобы оставшиеся образовывали возрастающую... подробнее

Показать сообщение отдельно
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
07.07.2013, 13:47     Хвостовая рекурсия
C++
1
2
3
4
int factorial(int n, int acc = 1) {
    if (n == 0) return acc;
    else return factorial(n - 1, acc * n);
}
Иначе никак.

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

Добавлено через 20 минут

Не по теме:

Правильный факториал на Си++ объектно-ориентированном Си++:

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
33
34
35
36
37
38
39
40
41
42
43
44
#include <map>
 
class fact {
    typedef std::map<int, int> memomap;
    static memomap memo;
 
    int value;
 
    static int helper(int n, int acc)
    {
        if (n == 0) return acc;
        else return helper(n - 1, acc * n);
    }
 
public:
    fact(int n)
    {
        memomap::iterator cur = memo.find(n);
        if (cur == memo.end())
        {
            memomap::iterator prev = memo.find(n - 1);
            if (prev == memo.end())
            {
                value = helper(n, 1);
            }
            else
            {
                value = n * prev->second;
            }
            memo[n] = value;
        }
        else
        {
            value = cur->second;
        }
    }
 
    operator int() const
    {
        return value;
    }
};
 
std::map<int, int> fact::memo;

 
Текущее время: 15:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru