Чтобы выполнить данную задачу с использованием рекурсивных функций на языке C++, мы моделируем три операции: возведение в степень, нахождение частного и остатка от деления. Для этого мы создадим функции, каждая из которых будет реализовать одну из этих операций рекурсивно.
1. Возведение в степень
Возведение числа n в степень m можно представить следующим образом:
- Если
m == 0, то результат равен 1 (по определению). - Если
m > 0, то мы можем выразитьn^mкакn * n^(m-1).
2. Деление (получение частного и остатка)
Для деления числа n на m используя рекурсию можно использовать следующий подход:
- Если
n < m, то частное равно 0 и остаток равенn. - Если
n >= m, то частное можно выразить как1 + (n - m) / m.
Реализация на C++
Теперь мы можем реализовать функции на C++.
#include <iostream>
// Функция для возведения в степень
int power(int n, int m) {
if (m == 0) {
return 1; // Любое число в 0-й степени равно 1
}
return n * power(n, m - 1); // Рекурсивный вызов
}
// Функция для нахождения частного
int divide(int n, int m, int &remainder) {
if (n < m) {
remainder = n; // Остаток равен n
return 0; // Частное равно 0
}
remainder = n - m; // Вычитаем m из n
return 1 + divide(remainder, m, remainder); // Рекурсивный вызов с обновленным n
}
// Главная функция для демонстрации работы
int main() {
int n, m;
// Ввод данных
std::cout << "Введите n (n > 0): ";
std::cin >> n;
std::cout << "Введите m (m >= 0): ";
std::cin >> m;
// Расчёт возведения в степень
int resultPower = power(n, m);
std::cout << n << "^" << m << " = " << resultPower << std::endl;
// Расчёт деления
int remainder;
int resultDivide = divide(n, m, remainder);
std::cout << n << " / " << m << " = " << resultDivide << " с остатком " << remainder << std::endl;
return 0;
}
Пояснения к коду:
Функция
power(int n, int m)- Если
mравно 0, функция возвращает 1 — это базовый случай. - Если
mбольше 0, функция возвращает произведениеnи результатов рекурсивного вызова дляm - 1.
- Если
Функция
divide(int n, int m, int &remainder)- Использует аргумент
remainder, передаваемый по ссылке, для хранения остатка от деления. - Если
n < m, прерывается рекурсия и возвращается 0 (частное) иn(остаток). - В противном случае, уменьшает
nнаmи вызывает рекурсивно, добавляя 1 к результату.
- Использует аргумент
Функция
main()- Запрашивает у пользователя ввод чисел
nиm. - Вызывает функции
powerиdivide, затем выводит результаты.
- Запрашивает у пользователя ввод чисел
Этот код на C++ демонстрирует рекурсивные вычисления для переносящихся в степенях, дробления и остатка от деления.