Presentation is loading. Please wait.

Presentation is loading. Please wait.

Recursion!. Can a method call another method? YES.

Similar presentations


Presentation on theme: "Recursion!. Can a method call another method? YES."— Presentation transcript:

1 Recursion!

2 Can a method call another method?

3 YES

4 Can a method itself? Also YES

5

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!


Download ppt "Recursion!. Can a method call another method? YES."

Similar presentations


Ads by Google