Опубликован: 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 >
Анастасия Халудорова
Анастасия Халудорова
екатерина яковлева
екатерина яковлева
Сергей Дмитриев
Сергей Дмитриев
Россия, Москва

( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.2642103649072watchdog( )../bootstrap.inc:0
23.2647103651536module_invoke( )../bootstrap.inc:967
33.2647103653392call_user_func_array ( )../module.inc:462
43.2647103653728devel_watchdog( )../module.inc:462
53.2649103654576decode_entities( )../devel.module:382
63.2650103656496drupal_error_handler( )../devel.module:340
73.2650103660112watchdog( )../common.inc:663
83.2650103662176module_invoke( )../bootstrap.inc:967
93.2651103664032call_user_func_array ( )../module.inc:462
103.2651103664368devel_watchdog( )../module.inc:462
113.2652103665064decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.2642103649072watchdog( )../bootstrap.inc:0
23.2647103651536module_invoke( )../bootstrap.inc:967
33.2647103653392call_user_func_array ( )../module.inc:462
43.2647103653728devel_watchdog( )../module.inc:462
53.2649103654576decode_entities( )../devel.module:382
63.2650103656496drupal_error_handler( )../devel.module:340
73.2650103660112watchdog( )../common.inc:663
83.2650103662176module_invoke( )../bootstrap.inc:967
93.2651103664032call_user_func_array ( )../module.inc:462
103.2651103664368devel_watchdog( )../module.inc:462
113.2652103665064decode_entities( )../devel.module:382

( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.2642103649072watchdog( )../bootstrap.inc:0
23.2647103651536module_invoke( )../bootstrap.inc:967
33.2647103653392call_user_func_array ( )../module.inc:462
43.2647103653728devel_watchdog( )../module.inc:462
53.2649103654576decode_entities( )../devel.module:382
63.2661103656688drupal_error_handler( )../devel.module:340
73.2661103660376watchdog( )../common.inc:663
83.2662103662440module_invoke( )../bootstrap.inc:967
93.2662103664296call_user_func_array ( )../module.inc:462
103.2662103664632devel_watchdog( )../module.inc:462
113.2663103665408decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.2642103649072watchdog( )../bootstrap.inc:0
23.2647103651536module_invoke( )../bootstrap.inc:967
33.2647103653392call_user_func_array ( )../module.inc:462
43.2647103653728devel_watchdog( )../module.inc:462
53.2649103654576decode_entities( )../devel.module:382
63.2661103656688drupal_error_handler( )../devel.module:340
73.2661103660376watchdog( )../common.inc:663
83.2662103662440module_invoke( )../bootstrap.inc:967
93.2662103664296call_user_func_array ( )../module.inc:462
103.2662103664632devel_watchdog( )../module.inc:462
113.2663103665408decode_entities( )../devel.module:382

( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.2670103649616watchdog( )../bootstrap.inc:0
23.2670103651680module_invoke( )../bootstrap.inc:967
33.2670103653536call_user_func_array ( )../module.inc:462
43.2670103653872devel_watchdog( )../module.inc:462
53.2671103654576decode_entities( )../devel.module:382
63.2672103656496drupal_error_handler( )../devel.module:340
73.2672103660120watchdog( )../common.inc:663
83.2672103662184module_invoke( )../bootstrap.inc:967
93.2673103664040call_user_func_array ( )../module.inc:462
103.2673103664376devel_watchdog( )../module.inc:462
113.2674103665072decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.2670103649616watchdog( )../bootstrap.inc:0
23.2670103651680module_invoke( )../bootstrap.inc:967
33.2670103653536call_user_func_array ( )../module.inc:462
43.2670103653872devel_watchdog( )../module.inc:462
53.2671103654576decode_entities( )../devel.module:382
63.2672103656496drupal_error_handler( )../devel.module:340
73.2672103660120watchdog( )../common.inc:663
83.2672103662184module_invoke( )../bootstrap.inc:967
93.2673103664040call_user_func_array ( )../module.inc:462
103.2673103664376devel_watchdog( )../module.inc:462
113.2674103665072decode_entities( )../devel.module:382

( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.2670103649616watchdog( )../bootstrap.inc:0
23.2670103651680module_invoke( )../bootstrap.inc:967
33.2670103653536call_user_func_array ( )../module.inc:462
43.2670103653872devel_watchdog( )../module.inc:462
53.2671103654576decode_entities( )../devel.module:382
63.2685103656688drupal_error_handler( )../devel.module:340
73.2686103660376watchdog( )../common.inc:663
83.2686103662440module_invoke( )../bootstrap.inc:967
93.2686103664296call_user_func_array ( )../module.inc:462
103.2686103664632devel_watchdog( )../module.inc:462
113.2686103665408decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.2670103649616watchdog( )../bootstrap.inc:0
23.2670103651680module_invoke( )../bootstrap.inc:967
33.2670103653536call_user_func_array ( )../module.inc:462
43.2670103653872devel_watchdog( )../module.inc:462
53.2671103654576decode_entities( )../devel.module:382
63.2685103656688drupal_error_handler( )../devel.module:340
73.2686103660376watchdog( )../common.inc:663
83.2686103662440module_invoke( )../bootstrap.inc:967
93.2686103664296call_user_func_array ( )../module.inc:462
103.2686103664632devel_watchdog( )../module.inc:462
113.2686103665408decode_entities( )../devel.module:382