Преобразить цикл в рекурсию С++

260
12 мая 2022, 11:40

Всем доброго времени суток. Я студентка 1 курса, преподаватель по программированию дал интересное задание: создать калькулятор комплексных чисел(именно их сумму), используя рекурсивный алгоритм Карацубы. Смогла справиться с этой задачей лишь с помощью циклов, пока что слабо представляю, где здесь можно использовать рекурсию. Буду благодарна за любую помощь. Код калькулятора ниже:

#include <math.h>
#include <iostream>
using namespace std;
// подсчет количества разрядов
int getLength(long long value) {
    int counter = 0;
    while (value != 0) {
        counter++;
        value /= 10;
    }
    return counter;
}
long long multiply(long long x, long long y) {
    int xLength = getLength(x);
    int yLength = getLength(y);
    // наибольший из двоих значений
    int N = (int)(fmax(xLength, yLength));
    // если максимальная длина достаточно маленькая, быстрее просто перемножить два числа обычным методом
    if (N < 10)
        return x * y;
    
    N = (N / 2) + (N % 2);
    // смещение для десятичной системы счисления
    long long multiplier = pow(10, N);
    long long b = x / multiplier;
    long long a = x - (b * multiplier);
    long long d = y / multiplier;
    long long c = y - (d * multiplier);
    long long d0 = multiply(a, c);
    long long d1 = multiply(a + b, c + d);
    long long d2 = multiply(b, d);
    // формула с(t)
    return d0 + ((d1 - d0 - d2) * multiplier) + (d2 * (long long)(pow(10, 2 * N)));
}
int main()
{
    
    long long a, b, c, d;
    cout << "a: "; cin >> a;
    cout << "b: "; cin >> b;
    cout << "c: "; cin >> c;
    cout << "d: "; cin >> d;
    cout << "r = " << (a * c - b * d) << endl;
    cout << "s = " << (a * d + b * c) << "i" << endl;
} 
Answer 1

Раз надо заменить на рекурсию while -

int getLengthRec(long long value) {
    if (value == 0) return 0;
    return getLengthRec(value/10) + 1;
    }
READ ALSO
Как вычислить сумму бесконечного ряда?

Как вычислить сумму бесконечного ряда?

Пусть дан бесконечный ряд,найти его суммуВот что я написал сам:

296
Сборка выдаёт ошибки C++ Visual Studio 2019 [закрыт]

Сборка выдаёт ошибки C++ Visual Studio 2019 [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

354
Преобразование const char [] в String

Преобразование const char [] в String

Допустим, есть такой код:

191