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

Рекурсивная функция умножения целых чисел - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.63
wep6ak
16 / 16 / 1
Регистрация: 08.03.2011
Сообщений: 109
13.08.2012, 19:57     Рекурсивная функция умножения целых чисел #1
Нужно написать рекурсивную функцию умножения двух целых чисел.
Вот, что у меня получилось :
C++
1
2
3
4
5
6
7
int mul(int a, int b)
{
    if (b == 1)
        return a;
    else
        return a + mul(a, b - 1);
}
Но эта функция работает только для целых чисел.


C++
1
2
3
4
5
6
7
int mul(int a, in b)
{
    if (b == 1)
        return a;
    else
        return mul(a * b, b / b);
}
Эта функция работает, но она не логичная... по сути я просто умножаю 2 числа
C++
1
a * b
.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int mul(int a, int b)
{
    if (b > 0)
        if (b == 1)
            return a;
        else
            return a + mul(a, b - 1);
 
    if (b < 0)
        if (b == -1)
            return 0 - a;
        else
            return 0 - (a - mul(a, b + 1));
}
Эта функция тоже работает... но она мне тоже не нравится

Как сделать, чтоб использовался только один оператор if-else и не использовались оп-ции умножения или деления ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2012, 19:57     Рекурсивная функция умножения целых чисел
Посмотрите здесь:

C++ Используя два вложенных цикла вывести на экран таблицу Пифагора – таблицу умножения двух целых чисел
Рекурсивная процедура умножения матриц C++
C++ Смоделировать операцию умножения двух целых чисел
Сформировать текстовый файл – таблицу умножения для целых чисел от 1 до заданного с консоли числа C++
Рекурсивная функция для расчета суммы всех двузначных чисел C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lom
 Аватар для lom
14 / 14 / 5
Регистрация: 28.03.2012
Сообщений: 52
13.08.2012, 20:38     Рекурсивная функция умножения целых чисел #2
Цитата Сообщение от wep6ak Посмотреть сообщение
Нужно написать рекурсивную функцию умножения двух целых чисел.
Вот, что у меня получилось :
C++
1
2
3
4
5
6
7
int mul(int a, int b)
{
    if (b == 1)
        return a;
    else
        return a + mul(a, b - 1);
}
Но эта функция работает только для целых чисел.

Как сделать, чтоб использовался только один оператор if-else и не использовались оп-ции умножения или деления ?
А Вы пробовали изменять тип на вещественный, говорят, что помогает
C++
1
2
3
4
5
6
7
float mul(float a, float  b)
{
    if (b == 1)
        return a;
    else
        return a + mul(a, b - 1);
}
а нет, извините, не прав

Добавлено через 10 минут
по сути, первый и третий методы одинаковы, но третий еще и для отрицательных
kent
Нуб со стажем
 Аватар для kent
36 / 34 / 2
Регистрация: 19.02.2012
Сообщений: 118
13.08.2012, 21:05     Рекурсивная функция умножения целых чисел #3
немножко запутанно:
C++
1
2
3
4
5
6
7
8
int mul(int a,int b){
    int sign;
    sign=a/abs(a)*b/abs(b);
    if(abs(a) == 1)
        return sign * b;
    else
        return sign * (abs(b) + mul(abs(abs(a)-1),abs(b)));
}
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
13.08.2012, 21:31     Рекурсивная функция умножения целых чисел #4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int mul(int a, int b)
{
   return a == 1 ? b : b + mul(a - 1, b);
}
 
int main()
{
   int a, b, rez;
   scanf("%d%d", &a, &b);
   if (a == 0 || b == 0)
      rez = 0;
   else if (a > 0)
      rez = mul(a, b);
   else if (b > 0)
      rez = mul(b, a);
   else rez = mul(-a, -b);
   printf("rez = %d\n", rez);
   return 0;
}
Yandex
Объявления
13.08.2012, 21:31     Рекурсивная функция умножения целых чисел
Ответ Создать тему
Опции темы

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