Как написать код без рекурсии?
Нужно написать программу без рекурсии. Вот сам код:
#include <iostream>
#include <math.h>
using namespace std;
void get(int n);
int main() {
int n;
while (1) {
cout << "Enter a number (0 = exit) and press ENTER: ";
cin >> n;
if (n == 0)
break;
get(n);
}
return 0;
}
void get(int n) {
double of_n = sqrt(n);
for(int i = 2; i <= of_n; ++i)
if (n % i == 0) {
cout << i << ",";
get(n / i);
return;
}
cout << n << endl;
}
Написал код без рекурсии но работает немного неправильно. Вот сам код:
#include <iostream>
#include <math.h>
using namespace std;
void get_all(int n);
void get_lowest(int n, int i);
int main() {
int n;
while (1) {
cout << "Enter the number: ";
cin >> n;
if (n == 0)
break;
get_all(n);
}
return 0;
}
void get_all(int n) {
double of_n = sqrt(n);
int i;
for(i = 2; i <= of_n; ++i)
if (n % i == 0) {
cout << i << ", ";
get_lowest(n, i);
return;
}
cout << n << endl;
}
void get_lowest(int n, int i) {
cout << n / i << endl;
}
Ответы (1 шт):
Автор решения: nano
→ Ссылка
Самый простой способ убрать рекурсию:
void get(int n) {
loop:
double of_n = sqrt(n);
for (int i = 2; i <= of_n; ++i)
if (n % i == 0) {
cout << i << ",";
n /= i;
goto loop;
}
cout << n << endl;
}
Хоть использование goto не поощряется, но иногда в си это делает код проще и короче.
Вариант без goto:
void get(int n) {
while (true) {
double of_n = sqrt(n);
int i = 2;
for (; i <= of_n; ++i)
if (n % i == 0) {
cout << i << ",";
n /= i;
break;
}
if (i > of_n) {
cout << n << endl;
break;
}
}
}