- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •• Данные
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •РекурсивныйЦентри дистанционногоне
- •Центр дистанционного
- •Центр дистанционного
- •Пример: факториалЦентр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Ц нтр дистанционного
- •Другие примеры:Центр дистанционного
- •Пример: палиндромЦе тр истанционного
- •Немного другойЦентрпример:дистанционного
- •Центр ди танционного
- •Взаимная рекурсияЦентр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
- •Центр дистанционного
Центр дистанционного
обучения
Использование нотации для представления
Вспомним, ранее рассмотренный нами пример “суммирование целых чисел от 1 до n”
• может быть описана в виде последовательности, используя следующее представление:
1
Sum = n + (n-1) + (n-2) + ... + 1 или åi i =n
• В качестве альтернативы могут быть использованы рекурсивные определения (рекуррентные соотношения):
Sum(n) = |
ì |
n, if |
n£1 |
|
ï |
||
|
í |
|
otherwise |
|
îïn+ Sum(n- 1), |
online.mirea
.ru
Пример: факториалЦентр дистанционного
обучения
• Вычисление факториалов
•Определения:
•Итеративный способ –
n! =
ì
ï
ï
ï
ï
ï
í
ï
ï
ï
ï
ï
î
1, if n=0
1*2*3*...*n, if n 0
|
• Рекурсивный способ – |
ì |
1, if |
n=0 |
|
|
|
ï |
|||
|
|
í |
|
otherwise |
|
|
n! = |
îï(n- 1)!*n, |
|||
• На Java: |
|
|
|
|
|
|
public int factorial(int n) |
|
|
|
|
|
{ |
|
|
|
|
|
if (n == 0) |
|
|
|
|
|
return 1; |
|
|
|
|
|
else return ( n * factorial(n-1)); |
|
|||
|
} |
|
|
|
|
|
|
|
|
online.mirea |
|
|
|
|
|
.ru |
Центр дистанционного
обучения
Пример: возведение в
степень• Напомним, что стандартая(xJavan)не предоставляет оператора возведения в степень:), поэтому нужно использовать метод pow() класса Math (например, Math.pow(2,3))
•Расчет возведения в степень также можно представить с помощью соотношения:
xn = exp(n * ln(x))
• Может также записать рекурсивно:
power(x,n)=
ì |
1, |
if |
n=0 |
ï |
x, |
if |
n=1 |
í |
ï |
otherwise |
îx* power(x,n- 1), |
•publicНа Java:float power(double x, int n { if (n == 0)
return 1.0; else if (n == 1)
return x;
else return ( x * power(x,n-1)); }
// Примечание: непримитивные параметры передаются по ссылке, в Java - массив не дублируется..
online.mirea
.ru
Центр дистанционного
обучения
Использование области видимости!
• В Java:
public int sumArray(int n)
{
//доступ к массиву(в случае списка),
//чтобы суммировать в пределах области видимости;
//n представляет текущее количество элементов в массиве
if (n == 1) |
|
return list[0]; |
|
else return (list[n-1] + sumArray(n-1)); |
|
} |
|
//в других языкаx, где параметры дублируются |
|
// доступ к массиву осуществляется через область видимости |
online.mirea |
|
|
|
.ru |
Центр дистанционного
Последовательныйобучения поиск
элементов в массиве по |
||
заданному значению |
||
• Рекурсивное определение |
ì |
i, if List[i]=Value |
í |
|
|
|
îSearch(List,i+1,Value), otherwise |
Search(List, i, Value) =
• Замечание:
(1)Предполагает, что требуемое значение в массиве,
(2)инициал. вызов: positionOfValue = Search(list,0,Value
(3)возвращает позицию массива, если значение находится в массиве
Java |
|
|
public int search(int[] List, int i, int Value) |
||
|
{ |
|
|
if (List[i] == Value) |
|
|
|
return i; |
|
else |
return Search(List,i+1,Value); |
|
} |
online.mirea |
|
|
.ru |
|
|
|
Центр дистанционного |
|
Последовательный поиск |
||||
|
|
|
обучения |
|
заданного значенияì |
в |
|||
|
массиве |
í |
- 99, if i==numEls |
|
|
• Рекурсивное определение |
ï |
i, if List[i]==value |
|
|
|
ï |
|
|
|
|
ï |
|
|
|
Search(List,i,value,numEls) = |
ï |
|
|
|
|
ïï |
Search(List,i+1,Value,numEls), otherwise |
|
|
|
î |
|
|
|
• Замечания: |
|
|
|
(1)Предполагает, что требуемое значение может и не быть в массиве, возвращается, тогда вовращаем число -99
(2)инициал. вызова: positionOfValue = Search(list,0,value,numEls)
(3)numEls – количество элементов в массиве (его размер)
• Java: public int search(int[] List, int i, int value, int numEls)
{ if (List[i] == value) return i;
else if (i == numEls) return -99;
}
else return Search(List,i+1,value,numEls);
online.mirea
.ru
Ц нтр дистанционного
Другие примеры:обучения
• Риверс строки символов, переданной в качестве параметра s
public void reverse (String s)
{
char t = s.charAt(0); if (s.length() > 1)
reverse(s.substring(1,s.length()));
System.out.print(t);
}
private static void convertToBinary(int x);
{
int t = x/2; // integer divide, truncate remainder
Преобразование целого числа в двоичное
if (t != 0) convertToBinary (t);
System.out.print(x % 2);
}
online.mirea
.ru
Другие примеры:Центр дистанционного
обучения
• Метод, который проверяет, является ли два массива, передаваемые в |
|
|||||||||||
качестве параметров одинаковыми по величине и содержанию (int n- |
||||||||||||
размер массива) и возвращает booean. |
|
!= y.length) |
// different sizes |
|||||||||
|
ì false, |
if |
(x.length |
|||||||||
|
í(x[0] == |
y[0]), |
if |
(n==1) |
// |
t |
| |
f only one element |
||||
|
ï |
|
|
|
|
|
|
|
|
|
||
|
ï |
false, |
if |
( |
x[n- 1]!=y[n- 1]) |
|
// f , if elements != |
|||||
areIdentical(x,y,n) = |
ï |
areIdentical(x, y,n- |
1), otherwise |
// continue |
||||||||
|
î |
public boolean areIdentical(int[] x, int[] y, int n)
{
if (x.length != y.length) return false;
else if (n == 1)
return (x[0] == y[0]); else if (x[n-1] != y[n-1])
return false;
else return areIdentical(x,y,n-1);
}
online.mirea
.ru
Пример: палиндромЦе тр истанционного
обучения
• Рассмотрим следующий пример – без учета регистра
boolean is_palindrome(String s)
{
// отдельный случай для коротких строк if (s.length() <= 1)
return true;
|
//Получить первый и последний символ |
|
|
char first = s.charAt(0); |
|
|
char last = s.charAt(s.length()-1); |
|
|
if (first == last) |
|
|
{ |
|
|
//substring(1,s.length(0-1)возвращает строку |
|
|
//между 1st и length-1 (не включая) |
|
|
String shorter = s.substring(1, s.length()-1); |
|
|
return is_palindrome(shorter); |
|
|
} |
|
|
else |
|
} |
return false; |
|
online.mirea |
|
|
|
|
|
|
.ru |
|
Немного другойЦентрпример:дистанционного
обучения
• Что делает следующий метод Java?
public int whoKnows(int[] x, int n)
{
if (n == 1) return x[0]; else
return Math.min(x[n-1], whoKnows(x, n-1));
}
online.mirea
.ru