пример рекурсии

 avatar
beq
c_cpp
2 years ago
1.7 kB
9
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...