База ответов ИНТУИТ

Программирование

<<- Назад к вопросам

Рассмотрим рекурсивную реализацию алгоритма Евклида:
int gcd1(int m, int n) {    if (n == 0)        return m;    int r = m % n;    return gcd1(n, r);}
Укажите, какова будет глубина рекурсии (т.е. какое максимальноеколичество кадров локальных переменных функции gcd1будет размещено одновременно в аппаратном стеке) при следующемвызове функции:
    int d = gcd1(25, 35);

(Ответ считается верным, если отмечены все правильные варианты ответов.)

Варианты ответа
2
3
4
5 (Верный ответ)
Похожие вопросы
Рассмотрим рекурсивную реализацию алгоритма Евклида:
int gcd1(int m, int n) {    if (n == 0)        return m;    int r = m % n;    return gcd1(n, r);}
Укажите, какова будет глубина рекурсии (т.е. какое максимальноеколичество кадров локальных переменных функции gcd1будет размещено одновременно в аппаратном стеке) при следующемвызове функции:
    int d = gcd1(7, 17);
Рассмотрим рекурсивную реализацию алгоритма Евклида:
int gcd1(int m, int n) {    if (n == 0)        return m;    int r = m % n;    return gcd1(n, r);}
Укажите, какова будет глубина рекурсии (т.е. какое максимальноеколичество кадров локальных переменных функции gcd1будет размещено одновременно в аппаратном стеке) при следующемвызове функции:
    int d = gcd1(21, 56);
Пусть дан массив a длины n,элементы которого нестрого возрастают, т.е. соседниеэлементы могут быть равными.Рассмотрим фрагмент программы бинарного поискаэлемента x в массивеa длины n, гдепосле отбрасывания особых ситуаций рассматриваетсяосновной случай:
        . . .        // Утверждение: a[0] < x && x <= a[n-1]        int beg = 0; int end = n-1;        while (end-beg > 1) {            // Инвариант: a[beg] < x && x <= a[end]            int c = (beg + end) / 2;            if (a[c] < x) {                beg = c;            } else if (a[c] > x) {                end = c;            } else {                // Утверждение: x == a[c]                *idx = c;                return true;            }        }        *idx = end;        return (x >= a[end]);        . . .
Пусть значение x содержится в массивев нескольких экземплярах. Индекс какого элементамассива a будет записан в переменную *idx?
Пусть процессор имеет 32-разрядную архитектуруи в некоторый момент его работы регистр SP содержит значение1000. Укажите, какое значение будет содержаться в SPпосле выполнения команды возврата из функции return.
Функция с прототипом
double root(double a, double b, double eps);
находит корень фиксированной функции
double f(double x);
на отрезке [a, b] методом деления отрезка пополамс точностью eps.Пусть функция f(x) определена следующимобразом:
double f(double x) {    return sin(x);}
Каким будет приблизительное значение переменной xв результате выполнения следующего фрагмента программы:
    double x = root(-1., 9., 0.000001);
Функция с прототипом
double root(double a, double b, double eps);
находит корень фиксированной функции
double f(double x);
на отрезке [a, b] методом деления отрезка пополамс точностью eps.Пусть функция f(x) определена следующимобразом:
double f(double x) {    double p = 1.;    double r = 1.;    while (r < 5.5) {        p *= (x - r);        r += 1.;    }    return p;}
Каким будет приблизительное значение переменной xв результате выполнения следующего фрагмента программы:
    double x = root(0., 5.9, 0.000001);
Рассмотрим следующую программу на C/C++:
#include <stdio.h>#include <math.h>int main() {    double x = pow(2., 1022.)*2.;    double y = pow(2., 1024.)/2.;    if (x == y) {        printf("x == y\n");    } else {        printf("x != y\n");    }    return 0;}
(Функция pow(a, b) возводитчисло a в степень b.)Что будет напечатано в результате ее выполнения?
Алгоритм быстрой сортировки реализован с помощью комбинированнойсхемы, использующей рекурсию и цикл while;рекурсия применяется лишь к меньшему сегменту массива,разделенного на части функцией partition.
void quickSort(double* a, int n) {    if (n <= 1) {        return;    } else if (n == 2) {        if (a[0] > a[1])            swap(&(a[0]), &(a[1]));        return;    }    int beg = 0;    int k = n;    while (k > 1) {        int m = k / 2;        partition(a+beg, k, &m);        int left = m;        int right = k - left - 1;        if (left <= right) {            // Рекурсивно применяем алг. к левой части            quickSort(a+beg, left);            beg += left + 1;            k -= left + 1;        } else {            // Рекурсивно применяем алг. к правой части            quickSort(a+beg+m+1, right);            k -= right + 1;        }    }}
Алгоритм применяется к массиву размером 191. Какой может бытьмаксимальная глубина рекурсии?(Под глубиной рекурсии мы подразумеваем количесто раз,которое функция может вызвать сама себя в цепочке вызовов.Если рекурсивный вызов отсутствует, то мы считаем глубину рекурсиинулевой.)
Алгоритм быстрой сортировки реализован с помощью комбинированнойсхемы, использующей рекурсию и цикл while;рекурсия применяется лишь к меньшему сегменту массива,разделенного на части функцией partition.
void quickSort(double* a, int n) {    if (n <= 1) {        return;    } else if (n == 2) {        if (a[0] > a[1])            swap(&(a[0]), &(a[1]));        return;    }    int beg = 0;    int k = n;    while (k > 1) {        int m = k / 2;        partition(a+beg, k, &m);        int left = m;        int right = k - left - 1;        if (left <= right) {            // Рекурсивно применяем алг. к левой части            quickSort(a+beg, left);            beg += left + 1;            k -= left + 1;        } else {            // Рекурсивно применяем алг. к правой части            quickSort(a+beg+m+1, right);            k -= right + 1;        }    }}
Алгоритм применяется к массиву размером 95. Какой может бытьмаксимальная глубина рекурсии?(Под глубиной рекурсии мы подразумеваем количесто раз,которое функция может вызвать сама себя в цепочке вызовов.Если рекурсивный вызов отсутствует, то мы считаем глубину рекурсиинулевой.)
Рассмотрим следующую программу на C/C++:
#include <stdio.h>#include <math.h>int main() {    double x = pow(2., 1024.);    double y = x / 2.;    double z = pow(2., 1023.);    if (y == z) {        printf("y == z\n");    } else {        printf("y != z\n");    }    return 0;}
(Функция pow(a, b) возводитчисло a в степень b.)Что будет напечатано в результате ее выполнения?