1 recur
TRANSCRIPT
![Page 1: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/1.jpg)
[email protected] Java: Recursion / 1
Recursion
Carlos Delgado KloosDep. Ingeniería TelemáticaUniv. Carlos III de Madrid
![Page 2: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/2.jpg)
[email protected] Java: Recursion / 2
Recursive methods
A method is called recursive, if it calls itself (directly or indirectly)
(For a recursive method to define a terminating computation)the recursive call(s) have to be simpler(according to some metric)
![Page 3: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/3.jpg)
[email protected] Java: Recursion / 3
Example 1
public static long s (int n){if (n==1) return 1; else return s(n-1)+n;}
![Page 4: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/4.jpg)
[email protected] Java: Recursion / 4
Example 1
s(3) = (recursive call)s(2)+3 = (recursive call)(s(1)+2)+3 = (recursive call)(1+2)+3 = (sum)(3+3)= (sum)6
![Page 5: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/5.jpg)
[email protected] Java: Recursion / 5
Example 2
public static long s (int n){if (n==1) return 1; else return s(n+1)+n;}
(for n>1)
![Page 6: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/6.jpg)
[email protected] Java: Recursion / 6
Example 2
s(3) = (rec. call)s(4)+3 = (rec. call)(s(5)+4)+3 = (rec. call)((s(6)+5)+4)+3 = (rec. call)(((s(7)+6)+5)+4)+3 = (rec. call)((((s(8)+7)+6)+5)+4)+3 =...Non-termination
![Page 7: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/7.jpg)
[email protected] Java: Recursion / 7
¿Qué debe tenerun método recursivo?
ConditionalBase case (non-recursive) 1
Recursive case s(n-1)+n (approximates towardsthe base case condition) (n==1)
![Page 8: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/8.jpg)
Exercise: countBack
void countBack (int counter)
{if(counter == 0)
return;
else {
System.out.println(""+counter);
countBack(--counter);
return;
}
}
[email protected] Java: Recursion / 8
![Page 9: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/9.jpg)
Exercise: square
(N-1)2 = N2 - 2N + 1N2 = (N-1)2 + 2N - 1
square(1) = 1square(N) = square(N-1) + 2N -1
[email protected] Java: Recursion / 9
![Page 10: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/10.jpg)
Exercise: square
int square(int n)
{if (n == 0)
return 0;
else
return square(n-1)+2*n-1;
}
[email protected] Java: Recursion / 10
![Page 11: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/11.jpg)
Exercise: mystery
mystery(0,Q) = Qmystery(P,Q) = mystery(P-1, Q+1)
What is the value of mystery(2,4)?
[email protected] Java: Recursion / 11
![Page 12: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/12.jpg)
[email protected] Java: Recursion / 12
Kinds of recursion:Linear recursion
Linear recursion(in each conditional branch at most one recursive call)Tail recursion
(last operation in branch:recursive call)
Non-tail recursion(pending operation)
![Page 13: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/13.jpg)
[email protected] Java: Recursion / 13
Kinds of recursion:Non-linear recursion
Non-linear recursionCascading recursion
( op(f...,f...) )Nested recursion
( f(...f...) )...
![Page 14: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/14.jpg)
Java: Recursion / 14
Example 3:Factorial
n fac(n)
0 1
1 1
2 2
3 6
4 24
5 120
... ...
fac(n) = n!
fac(5)=5*fac(4)=5*24=120
fac(5)=5*4*3*2*1
[email protected]@it.uc3m.es
![Page 15: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/15.jpg)
[email protected] Java: Recursion / 15
Non-tail recursion: Factorial
public static long fac (int n){if (n<=1) return 1; else return n*fac(n-1);}
![Page 16: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/16.jpg)
[email protected] Java: Recursion / 16
Tail recursion: Factorial
public static long fact (int n,m){if (n<=1) return m; else return fact(n-1,n*m);}
public static long fac (int n){return fact(n,1);}
![Page 17: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/17.jpg)
[email protected] Java: Recursion / 17
Example 4:Fibonacci
n fib(n)
0 1
1 1
2 2
3 3
4 5
5 8
... ...
fib(5)=fib(4)+fib(3)
= 5+3
![Page 18: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/18.jpg)
[email protected] Java: Recursion / 18
Example 4:Fibonacci
Exercise: Search for applications of Fibonacci with google
![Page 19: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/19.jpg)
[email protected] Java: Recursion / 19
Cascading recursion:Fibonacci
public static long fib (int n){if (n<=1) return 1; else return fib(n-1)+fib(n-2);}
![Page 20: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/20.jpg)
[email protected] Java: Recursion / 20
Fibonacci
fib(4)
fib(3) fib(2)
fib(2) fib(1)
fib(1) fib(0)1 1
12
3 2
5
fib(1) fib(0)1 1
![Page 21: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/21.jpg)
[email protected] Java: Recursion / 21
Linear Fibonacci
public static long fibo (int n,x,y){if (n<=1) return x+y; else return fibo(n-1,y,x+y);}
public static long fib (int n){return fibo(n,0,1);}
![Page 22: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/22.jpg)
[email protected] Java: Recursion / 22
fibo(4,0,1)
fibo(3,1,1)
fibo(2,1,2)
Fibonacci
fib(4)
5
5
55
fibo(1,2,3)
5
![Page 23: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/23.jpg)
[email protected] Java: Recursion / 23
Non-recursive Fibonacci
(1+5)n+1 - (1-5)n+1
fib(n)=—————————— (2n+1·5)
![Page 24: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/24.jpg)
[email protected] Java: Recursion / 24
Nested recursion:Morris
public static long mor(int n, m){if (n==m) return (m+1); else return mor(n,mor(n-1,m+1));}
![Page 25: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/25.jpg)
[email protected] Java: Recursion / 25
Morris
mor(4,0) =mor(4,mor(3,1)) =mor(4,mor(3,mor(2,2)) =mor(4,mor(3,3)) =mor(4,4) =5
![Page 26: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/26.jpg)
[email protected] Java: Recursion / 26
Nested recursion: Ackermann
public static long ack (int n, m){if (n==0) return (m+1); else if (m==0) return ack(n-1,1); else return ack(n-1,ack(n,m-1));}
![Page 27: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/27.jpg)
[email protected] Java: Recursion / 27
Mutual recursion
public static boolean impar (int n){if (n==0) return false; else return par(n-1);}
public static boolean par (int n){if (n==0) return true; else return impar(n-1);}
impar
par
![Page 28: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/28.jpg)
[email protected] Java: Recursion / 28
Recursion vs. Iteration
Tail recursion can be immediately converted into iteration (loop).
Other forms of recursion require program transformation techniques and possibly more complex data structures.
"The transformation from recursion to iteration is one of the most fundamental concepts of computer science.“ -- D. Knuth 1974
![Page 29: 1 Recur](https://reader035.vdocuments.us/reader035/viewer/2022062312/55586891d8b42aaa7e8b49cb/html5/thumbnails/29.jpg)
[email protected] Java: Recursion / 29
Factorial
public static long fact (int n,m){private int N,M; N=n; M=m; while !(N<=1) {M=N*M; N=N-1;} return M; }
public static long fact (int n,m){if (n<=1) return m; else return fact(n-1,n*m);}