С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.63
wep6ak
17 / 17 / 1
Регистрация: 08.03.2011
Сообщений: 110
#1

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

13.08.2012, 19:57. Просмотров 1228. Ответов 3
Метки нет (Все метки)

Нужно написать рекурсивную функцию умножения двух целых чисел.
Вот, что у меня получилось :
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 и не использовались оп-ции умножения или деления ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2012, 19:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Рекурсивная функция умножения целых чисел (C++):

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

Рекурсивная функция вычисления умножения элементов одномерного массива - C++
Реализовать рекурсивную функцию вычисление умножения элементов одномерного массива, - текст задания. Нужно сделать с помощью функций, то...

Рекурсивная функция. Возвести число в степень путём многократного умножения самого на себя - C++
помогите #include&lt;iostream.h&gt; int muFunc(int x ,int y ); int main () { short int x , y , z; cout&lt;&lt;&quot; vedit...

Рекурсивная функция подсчета количества простых чисел в последовательности - C++
Помогите, пожалуйста, написать программу с использованием рекурсии. Дана последовательность из N натуральных чисел. Нужно посчитать...

Рекурсивная функция, которая возвращает сумму n чисел Фибоначчи - C++
Помогите решить задачу Написать рекурсивную функцию, которая возвращает сумму n чисел Фибоначчи. Число n принимается в качестве...

Смоделировать операцию умножения двух целых чисел - C++
Смоделировать операцию умножения двух целых чисел длиной до 30 десятичных цифр каждое. Результат выдать в форме +\- 0.m E K, где длина...

3
lom
15 / 15 / 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 минут
по сути, первый и третий методы одинаковы, но третий еще и для отрицательных
1
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)));
}
1
Thinker
Эксперт С++
4229 / 2203 / 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;
}
1
13.08.2012, 21:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2012, 21:31
Привет! Вот еще темы с ответами:

Рекурсивная функция для расчета суммы всех двузначных чисел - C++
Напишите рекурсивную функцию расчета суммы всех двузначных чисел.

Рекурсивная функция: вычисление суммы чисел Фибоначчи, пока они меньше введенного числа - C++
Вроде примитивная задача, но реализовать не смог, да и нигде такого не обсуждалось, так что вот: Требуется реализовать рекурсивную функцию,...

Рекурсивная функция, которая находит позицию начала последовательности из 10 чисел, сумма которых минимальна - C++
Добрый день, помогите пожалуйста с программой. Напишите рекурсивную функцию, которая принимает одномерный массив из 100 целых чисел...

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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