
Министерство образования и науки РФ
Томский Государственный университет систем управления и радиоэлектроники (ТУСУР)
Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)
ОТЧЕТ
по лабораторной работе №3
Тема: “Рекурсия. Типы рекурсий”
Выполнил студент гр. 521
Ингинен А. И.
______________ 24.12.12
Принял: Романов А. С.
______________ 24.12.12
Томск 2012
-
Цель работы
Цель работы: изучение различных типов рекурсий и способов их применения для решения практических задач.
-
Задание
-
Изучить теоретический материал и представленный исходный код, реализующий различные типы рекурсии.
-
Разработать программу или комплекс программ, реализующих все типы рекурсий на языке программирования, на котором у студента нет опыта программирования.
-
Написать отчет и защитить у преподавателя.
-
Теоретический материал
Функция называется рекурсивной, если во время ее обработки возникает ее повторный вызов, либо непосредственно, либо косвенно, путем цепочки вызовов других функций.
Рекурсия, при которой рекурсивные вызовы на любом рекурсивном срезе, инициируют не более одного последующего рекурсивного вызова, называется линейной. Это наиболее простой и часто встречающийся тип рекурсии.
Частный случай линейной рекурсии с отсутствующими предварительными или отложенными вычислениями называется повторной рекурсией.
Рекурсию называют каскадной, если она не является линейной. Рекурсивные вызовы могут возникнуть более одного раза, образуя древовидную схему вызовов.
Рекурсия называется удаленной, если в теле функции при рекурсивных вызовах, в выражениях, являющихся фактическими параметрами, снова встречаются рекурсивные вызовы этой функции.
Циклическая последовательность вызовов нескольких функций F1, F2, ..., Fk (процедур, алгоритмов) друг друга: F1 вызывает F2, F2 вызывает F3, ..Fk вызывает F1 (k>1), называют косвенной или взаимной рекурсией.
-
Ход выполнения работы
-
Линейная рекурсия
public class lab3{
int lin (int a, int b){
if (a<b) return 0;
else return(lin(a-b,b)+1);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
{ lab3 f= new lab3();
System.out.println("rezult=" + f.lin(53,3));
}
}
}
-
Повторная рекурсия
public class lab32 {
int pov (int a, int b, int c){
if (a<b) return c;
else return(pov(a-b,b,c+1));
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
{ lab32 f= new lab32();
System.out.println("rezult=" + f.pov(100,2,0));
}
}
}
-
Взаимная рекурсия
public class lab33 {
double vzaim2 (int a){
if (a>0) return (vzaim1(a-1));
else return 1;
}
double vzaim1 (int a){
if (a==0) return 3;
else {if (a%2==0) return (vzaim2(a-1)+1);
else return (vzaim1(a-1));}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
{ lab33 f= new lab33();
System.out.println("rezult=" + f.vzaim1(1));
}
}
}
-
Каскадная рекурсия
public class lab34 {
int cas (int a){
if ((a==0)||(a==1)) return 1;
else return(cas(a-1)+cas(a-2));
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
{ lab34 f= new lab34();
System.out.println("rezult=" + f.cas(10));
}
}
}
-
Удаленная рекурсия
public class lab35 {
int udal (int a, int b){
if (a==0) return (b+1);
else {if (b==0) return udal(a-1,1);
else return udal(a-1,udal(a,b-1));
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
{ lab35 f= new lab35();
System.out.println("rezult=" + f.udal(2,3));
}
}
}
-
Вывод
В ходе выполнения лабораторной работы я изучила различные типы рекурсий и способы их применения для решения практических задач.