
- •Понятие потока данных в Java. Типы потоков.
- •Общая схема записи данных в поток и чтения данных из потока.
- •Байтовый поток: свойства, связь потока с файлом, чтение и запись, закрытие.
- •Потоки символов: свойства, связь потока с файлом, чтение и запись, закрытие.
- •Поток строк: свойства, связь потока с файлов, чтение и запись, закрытие.
- •Исключения при работе с потоками.
- •Понятие рекурсии. Рекурсивное вычисление факториала.
- •Понятие рекурсии. Рекурсивное вычисление суммы элементов массива.
- •Понятие рекурсии. Рекурсивное вычисление максимума в массиве.
- •Формулировка задачи о Ханойских башнях.
- •Применение рекурсии при определении связного списка.
- •Понятие списка. Объявление элемента списка.
- •Структура объявления элемента двусвязного списка.
- •Типовые операции для односвязных списков.
- •Кольцевой и двусвязный списки: отличия от односвязного списка.
- •Порядок добавление элемента в односвязный список.
- •Рекурсивный и итерационный метод обработки списка (на примере печати списка)
- •Коллекции: множества – основные элементы интерфейса Set.
- •Структура простейшего гип-приложения.
- •Цвет в гип. Конструкторы и цветовые константы класса.
- •Кнопка. Состояние кнопки. События кнопки, их обработка и идентификация.
- •Структура программы, имеющей интерфейс с двумя кнопками.
- •Элемент интерфейса «условие» («флажок»), его конструкторы и обработка событий.
- •Элемент интерфейса «радиокнопка», его конструкторы и обработка событий радиокнопок.
Понятие рекурсии. Рекурсивное вычисление факториала.
Понятие рекурсии.
Рекурсия (от латинского recursio - возвращение) - это такой способ организации вычислительного процесса, при котором процедура или функция в ходе выполнения составляющих ее операторов обращается сама к себе.
Для того, чтобы такое обращение не было бесконечным, в тексте подпрограммы должно быть условие, по достижению которого дальнейшего обращения не происходит. таким образом, рекурсивное обращение может включаться только в одну из ветвей подпрограммы.
Рекурсия достаточно широко применяется в программировании, что основано на рекурсивной природе многих математических алгоритмов. А также Вы должны знать, что любой рекурсивный алгоритм можно преобразовать в эквивалентный итеративный (то есть использующий циклические конструкции).
В больших и сложных программах иногда приходится заменять рекурсию на итерацию. Дело в том, что рекурсия связана с многократными вызовами процедур, а это несколько менее эффективно при выполнении по сравнению с использованием циклов. Однако рекурсивные версии программ, как правило, гораздо короче и нагляднее.
Хорошей иллюстрацией механизма рекурсии является функция для вычисления факториала натурального числа. Вспомним, что факториалом числа называется произведение всех натуральных чисел от 1 до этого числа включительно:
N! = 1*2*3* . . . *(N-2)*(N-1)*N
1! = 1
0! = 1
Пример факториала:
class fact {
static long x=1;
static long n=1;
public static void m(long x, long n){
n=n*x;
x=x+1;
if(x>50){}else{
m(x, n);System.out.println(n+" "+x);}
}
}
Понятие рекурсии. Рекурсивное вычисление суммы элементов массива.
class vuchislFakt{
static int A [] ={1,4,5,7,8,6,8,7,1,71,5,8,9,3,1,4,15,35,65,45,75,95,65,45,78,98,564,25,14,35,45};
static int sum=0;
static int i=-1;
public static void m(){
i++;
sum+=A[i];
if(i==(A.length-1)){System.out.println(sum);}else{
m();}
}
}
Понятие рекурсии. Рекурсивное вычисление максимума в массиве.
class vuchislFakt{
static int A [] ={1,4,5,7,8,6,8,7,1,71,5,8,9,3,1,4,15,35,65,45,75,95,65,45,78,98,564,25,14,35,45};
static int max=0;
static int j=-1;
public static void main(String [] arg){
vuchislFakt vF= new vuchislFakt();
vF.maxArg();
}
public void maxArg(){
j++;
if(max<A[j]){
max=A[j];
}
if(j==(A.length-1)){System.out.println("Максимальный эл. масива:"+max);}else
{ maxArg();
}
}
}
Формулировка задачи о Ханойских башнях.
Формулировка задачи:
Даны три стержня, на один из которых нанизаны восемь колец, причем кольца отличаются размером и лежат меньшее на большем. Задача состоит в том, чтобы перенести пирамиду из восьми колец за наименьшее число ходов на другой стержень. За один раз разрешается переносить только одно кольцо, причём нельзя класть большее кольцо на меньшее.
Минимальное число ходов, необходимое для решения головоломки, равно 2n - 1, где n — число дисков.
Начнём с самого маленького кольца и переложим его на любую отметку. В дальнейшем это кольцо нужно перемещать в том же направлении, что и при первом перекладывании. Затем произведем единственно возможное перемещение оставшихся колец, после чего снова переложим самое маленькое кольцо и т. д. (Интересно заметить, что перенумеровав «кольца» по порядку, мы добьёмся неожиданного эффекта: чётные кольца будут перемещаться из одной вершины треугольника в другую в одном направлении, а нечётные — в противоположном направлении.)