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

Используя рекурсию, перемножить 2 натуральных числа не используя операции умножения и иметь логарифмическую сложность - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Блочная сортировка http://www.cyberforum.ru/cpp-beginners/thread1108675.html
В данной программе происходит сортировка фамилий по алфавиту.Мне же требуется сортировка всего массива структур. То есть структуры должны стоять в том порядке, в котором должны стоять(по алфавиту)...
C++ Вычислить значение выражения #include<iostream.h> #include<conio.h> #include<math.h> //using namespace std; int main(void){ double x=1; double hx=0.5; double a=-0.5; double ha=0.2; double f; http://www.cyberforum.ru/cpp-beginners/thread1108673.html
Редактирование текста в консоли C++
Подскажите с помощью чего можно реализовать простой редактор текста прямо в консоли? Библиотека какая-то есть мб? Например, прочитал текст из файла, вывел в консоль. Нужна возможность стрелками...
Использовать классы, или обойтись линейными действиями? C++
Создайте имитацию входа в систему, которая будет запрашивать пароль и выдавать приглашение только в случае совпадения введенного пароля с заранее определенным в программе, а в случае ошибки...
C++ Написать перегруженные функции http://www.cyberforum.ru/cpp-beginners/thread1108644.html
Написать перегруженные функции и основную программу, которая их вызывает. а) для сложения вещественных чисел; б) для сложения комплексных чисел.
C++ Линейная функция условие задачи состоит в том, что нужно ввести 3 числа с клавы и вывести окончательное значение функции, легче уже не придумаешь, НО у меня появилась ошибка. Когда я ввожу первое число, сразу... подробнее

Показать сообщение отдельно
DrOffset
7315 / 4415 / 1000
Регистрация: 30.01.2014
Сообщений: 7,252
01.03.2014, 23:17
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
C++
1
2
3
4
int f(int n, int m){
    if (m==0) return 0;
    else return n+f(n,m-1);
}
такая функция будет дольше исполняться, если второй аргумент больше первого, и чем больше между ними разница, тем заметнее будет замедление.
Поэтому можно предложить такую оптимизацию:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
unsigned int multiply1(unsigned int a, unsigned int b)
{
    return b == 0 ? 0 : multiply1(a, b - 1) + a;
}
 
unsigned int multiply2(unsigned int a, unsigned int b)
{
    return a == 0 ? 0 : multiply2(a - 1, b) + b;
}
 
unsigned int mul(unsigned int a, unsigned int b)
{
    if(a == 0 || b == 0)
    {
        return 0;
    }
    return a > b ? (multiply1(a, b - 1) + a) : (multiply2(a - 1, b) + b);
}
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru