Download presentation
Presentation is loading. Please wait.
1
Recursion!
2
Can a method call another method?
3
YES
4
Can a method itself? Also YES
6
Rules: 1. Recursive call must be to a smaller version of the problem. 2. Recursion must be heading for the base case.
7
public static int fact(int n) { if (n == 0) return 1; else return n*fact(n-1); }
8
public static void main(String[] args) { int f; f = fact(4); System.out.println(f); } Call to fact(4)
9
public static int fact(int n) { if (n == 0) return 1; else return n *fact(n -1); }
10
public static int fact(int 4) { if (4 == 0) return 1; else return 4 *fact(4 -1); } Call to fact(3)
11
public static int fact(int 4) { if (4 == 0) return 1; else return 4 *fact(4 -1); } public static int fact(int 3) { if (3 == 0) return 1; else return 3 *fact(3 -1); } Call to fact(2)
12
public static int fact(int 4) { if (4 == 0) return 1; else return 4 *fact(4 -1); } public static int fact(int 3) { if (3 == 0) return 1; else return 3 *fact(3 -1); } public static int fact(int 2) { if (2 == 0) return 1; else return 2 *fact(2 -1); } Call to fact(1)
13
public static int fact(int 4) { if (4 == 0) return 1; else return 4 *fact(4 -1); } public static int fact(int 3) { if (3 == 0) return 1; else return 3 *fact(3 -1); } public static int fact(int 2) { if (2 == 0) return 1; else return 2 *fact(2 -1); } public static int fact(int 1) { if (1 == 0) return 1; else return 1 *fact(1 -1); } Call to fact(0)
14
public static int fact(int 4) { if (4 == 0) return 1; else return 4 *fact(4 -1); } public static int fact(int 3) { if (3 == 0) return 1; else return 3 *fact(3 -1); } public static int fact(int 2) { if (2 == 0) return 1; else return 2 *fact(2 -1); } public static int fact(int 1) { if (1 == 0) return 1; else return 1 *fact(1 -1); } public static int fact(int 0) { if (0 == 0) return 1; else return 0 *fact(0 -1); }
15
public static int fact(int 4) { if (4 == 0) return 1; else return 4 *fact(4 -1); } public static int fact(int 3) { if (3 == 0) return 1; else return 3 *fact(3 -1); } public static int fact(int 2) { if (2 == 0) return 1; else return 2 *fact(2 -1); } public static int fact(int 1) { if (1 == 0) return 1; else return 1 *fact(1 -1); } public static int fact(int 0) { if (0 == 0) return 1; else return 0 *fact(0 -1); }
16
public static int fact(int 4) { if (4 == 0) return 1; else return 4 *fact(4 -1); } public static int fact(int 3) { if (3 == 0) return 1; else return 3 *fact(3 -1); } public static int fact(int 2) { if (2 == 0) return 1; else return 2 *fact(2 -1); } public static int fact(int 1) { if (1 == 0) return 1; else return 1 *fact(1 -1); } Returned 1
17
public static int fact(int 4) { if (4 == 0) return 1; else return 4 *fact(4 -1); } public static int fact(int 3) { if (3 == 0) return 1; else return 3 *fact(3 -1); } public static int fact(int 2) { if (2 == 0) return 1; else return 2 *fact(2 -1); } Returned 1
18
public static int fact(int 4) { if (4 == 0) return 1; else return 4 *fact(4 -1); } public static int fact(int 3) { if (3 == 0) return 1; else return 3 *fact(3 -1); } Returned 2
19
public static int fact(int 4) { if (4 == 0) return 1; else return 4 *fact(4 -1); } Returned 6
20
public static void main(String[] args) { int f; f = fact(4); System.out.println(f); } Returned 24
21
public static void main(String[] args) { int f; f = fact(4); System.out.println(f); } Displays 24
22
?
23
Comments about recursion 1.Recursion is never necessary. Can always be done iteratively. 2.Can hide inefficiency. 3.But may be the easiest, clearest, shortest way to write a program.
24
public static int fib(int n) { // pre: n>=0 // post: returned value is fib(n) if (n==0 || n==1) return n; else return fib(n-1)+fib(n-2); }
25
Fib(8)
26
Fib(6)Fib(7)
27
Fib(8) Fib(6) Fib(5)Fib(6) Fib(7)
28
Fib(8) Fib(4)Fib(5) Fib(6) Fib(5) Fib(6) Fib(7) Fib(4)
29
Yadda yadda yadda
30
Fib(8) Fib(4)Fib(5) Fib(6) Fib(5) Fib(6) Fib(7) Fib(2)Fib(3) Fib(4)Fib(3)Fib(4)
31
Fib(8) Fib(4)Fib(5) Fib(6) Fib(5) Fib(6) Fib(7) Fib(2)Fib(3) Fib(4)Fib(3)Fib(4)
32
To compute fib(8), we call: fib(8)1 time fib(7)1 times fib(6)2 times fib(5)3 times fib(4)5 times fib(3)8 times fib(2)13 times fib(1)21 times fib(0)13 times A total of 67 method calls!
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.