Опубликован: 27.09.2006 | Уровень: для всех | Доступ: свободно
Лекция 5:

Рекурсия, итерация и оценки сложности алгоритмов

< Лекция 4 || Лекция 5: 12345 || Лекция 6 >

Java и циклические конструкции

Математическая модель итерации, описанная в первой секции данного параграфа не дает никаких практических рекомендаций, как именно реализовать вычисления. Во второй главе книги будут рассмотрены три более частных схемы обработки информации с помощью метода итерации — проектирование цикла при помощи инварианта и схемы вычислений инвариантной и индуктивной функций. Пока же ограничимся описанием управляющих конструкций языка Java, которые используют для организации циклов, и рассмотрением нескольких примеров программ.

Язык Java предусматривает три различных оператора цикла: while, do-while и for. Первый из них обычно используют в ситуации, когда тело цикла нужно выполнить нуль или более раз, а второй применяется, если его выполнение хотя бы раз обязательно. Третий из операторов является наиболее универсальным и используется в различных ситуациях.

Дополнительными средствами, используемыми при организации циклов, являются операторы break и continue. Первый из них прерывает выполнение цикла, а второй позволяет досрочно перейти к выполнению следующей итерации, проигнорировав часть операторов тела цикла, еще не выполненных в текущей итерации. Заметим, что в языке Java отсутствует оператор goto, — в тех редких ситуациях, где он мог бы оказаться полезным, можно использовать операторы break или continue с метками.

В качестве первого примера рассмотрим опять задачу вычисления факториала и программу, реализующую предложенную выше схему применения преобразования T(i,k) = (i+1,k*i).

Задача 5.3. Напишите итерационную программу, вычисляющую факториал введенного натурального числа.

Текст программы

public class FactIv1 {
    public static void main(String[] args) throws Exception {    
        int n, i, k;
        n = Xterm.inputInt("Введите n -> ");
        i = k = 1;
        while (i <= n) {
            k *= i;
            i += 1;
        }
        Xterm.println("" + n + "! = " + k);
    }
}

Конструкцию while в ней можно заменить на do-while:

Фрагмент программы (FactIv2.java)

do {
            k *= i;
            i += 1;
        } while (i <= n);

А еще лучше воспользоваться циклом for:

Фрагмент программы (FactIv3.java)

int i, k, n = Xterm.inputInt("Введите n -> ");
        for (i = k = 1; i <= n; i++)
            k *= i;
        Xterm.println("" + n + "! = " + k);
< Лекция 4 || Лекция 5: 12345 || Лекция 6 >
Анастасия Халудорова
Анастасия Халудорова
подавляющее большиство фукций на пространстве последовательостей?
екатерина яковлева
екатерина яковлева
как получить сертификат,что для этого нужно?
Дмитрий Карпов
Дмитрий Карпов
Россия, Нижний Новгород
Антон Никитин
Антон Никитин
Россия, Хабаровск