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

Рекурсивная функция С++ - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Операторы отношений и логические операторы http://www.cyberforum.ru/cpp-beginners/thread654047.html
Всем добрый день. Очередной день изучения Г.Шилда С++ базовый курс, дошел до Операторов отношений, все понял, но не компилируется данный код: //Эта программа демонстрирует использование функции...
C++ Конвертер различных измерений массы Написать программу, которая бы по введенному номеру единицы измерения (1 — килограмм, 2 — миллиграмм, 3 — грамм, 4 -тонна, 5 — центнер) и массе М выдавала бы соответствующее значение массы в... http://www.cyberforum.ru/cpp-beginners/thread654041.html
C++ условия и таймер | C++
Как сделать 2 условия на таймер, тоесть он задан к примеру на 5 минут, нужно чтобы 1 действие выполнялось когда будет 3 минуты, а 2 действие когда 1 минута, к примеру эти действия вывод сообщений.
C++ Найти сумму ряда с заданной точностью, если дан общий член ряда
Найти сумму ряда с точностью Е=-4 (0.0001) общий член которого n=n*-n2 (n kvadrat)... Надо написать программу, т.е текст..на языке Си...
C++ размеры переменных http://www.cyberforum.ru/cpp-beginners/thread654007.html
Есть переменные типа int(2 байта), double(8 байт),char(1 байт) и т.д. под которые отведено соответствующие количество памяти, могу ли я сделать свой тип переменной допустим с длиной 4096 байт?
C++ Вычислить выражение Составить программу вычисления выражения в правой части. Все значения для вычисления ввести с клавиатуры. Все значения для вычисления являются целыми числами.... подробнее

Показать сообщение отдельно
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
19.09.2012, 02:13
Цитата Сообщение от serejkus Посмотреть сообщение
Зато версия bgm313 с большей вероятностью будет подвергнута tail-recursion оптимизации (особенно, если не создавать result).
У этой версии вероятность не хуже:
C++
1
2
3
4
5
6
7
8
9
int Sum(int *a, int *end, int result = 0)
{
  if (a >= end) {
    return result;
  }
  else {
    return Sum(a + 1, end, result + *a);
  }
}
Кликните здесь для просмотра всего текста
А вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int Sum(int *a, int *end)
{
  int result = 0;
past:
  if (a >= end) {
    return result;
  }
  else {
    result += *a;
    a += 1;
    goto past;
  }
}
гарантированно заоптимизирован ^^
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru