пример рекурсии
beq
c_cpp
3 years ago
1.7 kB
15
Indexable
double func(double n) { // рекурсия
static double a1; // первый a and b
static double b1; // для подсчета а2,b2
static double a, b;
static double sum;
static int k = 1; // номер итерации
if (k == 1) {
k = a1 = b1 = 1;
sum = 0;
}
a = 0.5 * (sqrt(b1) + (0.5 * (sqrt(a1)))); // все по задаче
b = 2 * (a1 * a1) + b1;
sum += a * b;
a1 = a; // получаем a(k-1),b(k-1)
b1 = b;
k++; // прибавляем k
return (k < n) ?
func(n) :
k = 1, sum;
}
double cycle(double n) { // цикл
double a1 = 1;
double b1 = 1;
double a, b;
double sum = 0;
for (int k = 1; k < n; k++) { // Пока k < n, выполняем цикл
a = 0.5 * (sqrt(b1) + (0.5 * (sqrt(a1))));
b = 2 * (a1 * a1) + b1;
sum += a * b;
a1 = a;
b1 = b;
}
return sum;
}
int input() { // ввод
double n; bool flag = false; // Лог. переменные
char select = _getch();
system("cls"); // очитска консоли
cout << "Введите натуральное число n (от 1 до 101):\n";
do {
flag = false;
cout << "\nn = ";
cin >> n;
if (!cin || n < 1 || n > 101 || n != (int)n) { // защита от дурака
cin.clear();
while (cin.get() != '\n');
cout << "\nОшибка. Повторите ввод.\n";
flag = true;
}
} while (flag);
cout << "\nВы ввели число:" << (int)n << endl;
}
return (int)n;
}
Editor is loading...