Zhen Jiang West Chester University zjiang@wcupa.edu Recursive program Zhen Jiang West Chester University zjiang@wcupa.edu
Outline Review of function/method Introduction Static Analysis Design idea Keys Static Analysis Examples
Review of Function/Method Why function/method To avoid copying the same code in many places Format (Figure 5-3, page 256) Call Declaration (public static, page 551) Working procedure (Figure 5-4, page 258) Details of the use of function/method Argument and parameter (Figure 5-7, page 264) Type Compatibility and casting (page 266) Multiple arguments passed into multiple parameters (Figure 5-8, page 268) Value passing (Code 5-6, page 269) Object passing (code 5-7, page 271) Return Value return (Figure 5-14, page 279, code 5-9, page 280) Object return (code 5-10, page 283) Scope (lifetime of variable) (page 267)
Introduction Divide-and-conquer multi-layer job division (job becomes smaller) Results collection Result reporting (to caller)
Introduction (cont.) f ( Job ) f ( Job.sub-job1 ) f ( Job.sub-job2 ) sub-sub-job1 ) f ( Job.sub-job1. sub-sub-job2 )
Introduction (cont.) Keys Division (The assignment and reporting of the requested job is divided into smaller pieces: job division, results collection, and result reporting, in divide-conquer tree by many non-leaf node.) Recursive procedure (ensure each node in the divide-conquer tree has similar procedure that can be written in a general/common format, but more abstract) Terminated condition (decide who will really do the job) Samples to see these keys (in static analysis)
Static Analysis Check the whole execution. Think about: You are a computer and run the program statement by statement. Need to check the result after each statement. Show the procedure called at different time.
General format, all same Examples f(4) f(3) f(2) f(1) f(0) f(int i) { if (i ==0) return 1; else return i*f(i-1); } 4*f(3) 3*f(2) 2*f(1) 1*f(0) 1 24 6 1 2 f(4)? General format, all same Terminated condition job division Results collection Result reporting
Examples (cont.) f(int i) { if (i <=1) return 1; else return f(i-1)+f(i-2); } f(3)? f(3) f(2) f(1) f(0) f(2)+f(1) f(1)+f(0) 1 1 3 2
Examples (cont.) f(3) f(2) f(1) f(0) f(1) f(int i) { int y=i; Static int z=0; z++; if (i <=1) { System.out.println(y+” ”+z); return 1; } else return f(i-1)+f(i-2); f(3)? f(4)? f(3) f(2) f(1) f(0) ? y=3 z=0 z=1 y=1 z=3 y=0 z=4 y=2 z=2 f(1)+f(0) 1 3 0 4 f(2)+f(1) 1 1 3 2 f(1) y=1 z=5 1 5 1
Examples (cont.) f(3) f(2) f(1) f(0) f(int i) { if (i <=1) return 1; else if (i==3) return f(i-1)-f(i-2); else return f(i-1)+f(i-2); } f(3)? f(2)-f(1) f(1)+f(0) 1 1 1 2
Review Idea, working flow Figures 15-1, 15-2, 15-3 (p959-960) Program (program format, static analysis for execution results) Codes 15-4 (p962), 15-7(p969), 15-8 (p970), 15-10 (p978) Design See the discussion on solution in project 2