120 likes | 135 Views
Learn about the review of function/method, its purpose, format, call and declaration, argument and parameter, type compatibility and casting, value and object passing, return value and scope, introduction to divide-and-conquer methodology, keys to recursive programming, static analysis using examples, and design considerations.
E N D
Recursive program Zhen Jiang West Chester University zjiang@wcupa.edu
Outline • Review of function/method • Introduction • 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 ) f ( Job.sub-job1. 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.
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(3) f(2) f(1) f(0) f(int i) { if (i <=1) return 1; else return f(i-1)+f(i-2); } f(3)? f(2)+f(1) f(1)+f(0) 1 1 3 2
Examples (cont.) f(3) f(2) f(1) f(0) 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)? ? 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