public class Print Squares public static void mainString
public class Print. Squares { public static void main(String [] args) { System. out. println("****"); System. out. println("****"); } } public class Print. Steps { public static void main(String [] args) { System. out. println("-----"); System. out. println(" |"); System. out. println(" -----"); System. out. println(" |"); } }
public static void pos(int n, String str){ for(int i=0; i<n; i++)System. out. print(str); } public static void square(int len){ pos(len, “*”); System. out. println(); for(int i=0; i<len-2; i++){ pos(1, “*”); pos(len-2, “*”); pos(1, “*”); System. out. println(); } pos(len, “*”); System. out. println(); } public static void squares (int n, int length){ square(length); for(int i=1; i<n; i++){ System. out. print square(length); } }
public static void pos(int n, String str){ for(int i=0; i<n; i++)System. out. print(str); } public static void step(int start, int width, int depth){ space(start, “ “); pos(width, “-”); System. out. println(); for(int i=0; i<depth; i++){ pos(start+width, “ “); pos(1, “|”); System. out. println(); } } public static void steps (int n, int width, int depth){ for(int i=0; i<n; i++){ step((width+1)*i, width, depth); } }
• Calculate the result 1+3+5+7+9+11+13+…+99 when f 1(99) is called. job division: 1+3+5+…+97+99 => 1+…+97 f 1(99) => f 1(97) results collection: f 1(97)+99 result reporting: return
job division: 1+3+5+…+97 => 1+…+95 f 1(97) => f 1(95) results collection: f 1(95)+97 result reporting: return General format: : job division: f 1(x) => f 1(x-2) results collection: f 1(x-2)+x result reporting: return
job division: f 1(x) => f 1(x-2) f 1(3) => f 1(1) => none! Terminating condition: x <=1 Why x<=2 ok? 7, 5, 3 go false!
job division: f 1(x) => f 1(x-2) results collection: f 1(x-2)+x result reporting: return Terminating condition: x <=1 public static int f 1 ( if (x <=1) return 1; else return f 1(x-2)+x; } int x ) {
• Calculate the result 1+2+4+8+16+32+…+4096 when f 2(4096) is called. job division: 1+2+…+2048+4096 => 1+…+2048 f 2(4096) => f 2(2048) results collection: f 2(2048)+4096 result reporting: return
job division: f 2(x) => f 2(x/2) results collection: f 2(x/2)+x result reporting: return
f 2(x) => f 2(x/2) f 2(2) => f 2(1) => none! Terminating condition: x <=1
job division: f 2(x) => f 2(x/2) results collection: f 2(x/2)+x result reporting: return Terminating condition: x <=1 public static int f 2 ( if (x <=1) return 1; else return f 2(x/2)+x; } int x ) {
• Calculate the result 1/i+2/(i-1)+3/(i-2)+…+(i-1)/2+i/1 when f 3(1, i) job division: 1/i+2/(i-1)+…+i/1 => f 3(2, i-1) f 3(1, i) results collection: f 3(2, i-1) + (double)1/i result reporting: return
job division: f 3(x, y) => f 3(x+1, y-1) results collection: f 3(x+1, y-1)+(double)x/y result reporting: return
f 3(x, y) => f 3(x+1, y-1) f 3(i-1, 2) => f 3(i, 1) => none! Terminating condition: x >=i Terminating condition: y <=1 Where is “I” in “f 3”?
job division: f 3(x, y) => f 3(x+1, y-1) results collection: f 3(x+1, y-1)+(double)x/y result reporting: return Terminating condition: y <=1 public static double f 3 ( int X, int y ) { if (y<=1) return (double)x/y; else return f 3(x+1, y-1)+(double)x/y; }
• Calculate the result 1/i+2/(i-1)+3/(i-2)+…+(i-1)/2+i/1. job division: 1/i+…+(i-1)/2+i/1 => 1/i+…. (i-1)/2 f 3(1, i) => f 3(2, i-1) results collection: f 3(2, i-1) + (double)i/1 result reporting: return
job division: f 3(x, y) => f 3(x+1, y-1) results collection: f 3(x+1, y-1)+(double)y/x result reporting: return
f 3(x, y) => f 3(x+1, y-1) f 3(i-1, 2), i. e. , 2/i-1 => f 3(i, 1), i. e. , 1/i => none! Terminating condition: y<=1
job division: f 3(x, y) => f 3(x+1, y-1) results collection: f 3(x+1, y-1)+(double)y/x result reporting: return Terminating condition: y<=1 public static double f 3 ( int X, int y ) { if (y<=1) return (double)y/x; else return f 3(x+1, y-1)+(double)y/x; }
• The world population reached 6 billion people in 1999 and was growing at the rate of 1. 4 percent each year. Write a recursive function f to return/determine when the population will exceed 10 Billion when f 4(6, 10, 1999) is called. job division: from 1999 (p=6) to target year (p>10) from 2000 (p=6*1. 014) to target year results collection: f 4(6*1. 014, 10, 2000) result reporting: return
job division: f 4(cp, tp, y) => f 4(cp *1. 014, tp, y+1) results collection: f 4(cp *1. 014, tp, y+1) result reporting: return
General Format: => f 4(cp, tp, yr) … => f 4(>tp, yr) => none! Terminating condition: cp>tp
job division: f 4(cp, tp, y) => f 4(cp *1. 014, tp, y+1) results collection: f 4(cp *1. 014, tp, y+1) result reporting: return Terminating condition: cp>tp public static int f 4 ( double cp, double tp, int x ) { if (cp >tp) return x; else return f 4(cp*1. 014, tp, x+1); }
• A TV set is purchased with a loan of $563 to be paid off with monthly payment (no more than $116). The interest rate is 1 percent per month. Write a recursive function f to return the amount of last bill when f 5(563, 116) is called. job division: from 563 until <=116 from (563 -116 )*1. 01 (i. e. , next month) until <=116 results collection: f 5((563 -116)*1. 01, 116) result reporting: return
job division: f 5(x, y) => f 5((x-y)*1. 01, y) results collection: f 5((x-y)*1. 01, y) result reporting: return
f 5(x, y) => f 5((x-y)*1. 01, y) … => f 5(<=116, 116) => none! Terminating condition: x <=116, i. e. , y
job division: f 5(x, y) => f 5((x-y)*1. 01, y) results collection: f 5((x-y)*1. 01, y) result reporting: return Terminating condition: x <=y public static double f 5 (double X, int y) { if (x<=y) return x; else return f 5((x-y)*1. 01, y); }
• Develop a recursive function f 6 to display the sequence 1 2 3 4 5 … i in a text field when f 6(i) is called. job division: display 1, 2, …, i-1, i display 1, 2, …, i-1 results collection: f 6(i-1) on the screen, and System. out. print(i) result reporting: results are on the screen, nothing to report!
job division: f 6(x) => f 6(x-1) results collection: f 6(x-1); System. out. print(x); result reporting: void
f 6(x) => f 6(x-1) … => f 6(1) => none! Terminating condition: x <=1
job division: f 6(x) => f 6(x-1) results collection: f 6(x-1); System. out. print(x); result reporting: none Terminating condition: x <=y public static void f 6 ( int if (x <=1) System. out. print(x); else { f 6(x-1); System. out. print(x); } } x ) {
• Develop a recursive function f 7 to display the sequence 1 2 3 4 5 … i (i-1) (i-2) … 2 1 in a text field when f 7(1, i) is called. job division: display 1, 2, …, i-1, i, i-1, …, 2, 1 display 2, …, i-1, i, i-1, …, 2 results collection: f 7(2, i) on the screen, and System. out. print(1) twice! result reporting: results are on the screen, nothing to report!
job division: f 7(x, y) => f 7(x+1, y) results collection: System. out. print(x) f 7(x+1, y); System. out. print(x); result reporting: void
f 7(x, y) => f 7(x+1, y) … => f 7(i-1, i) //two 8’s => none! Terminating condition: x >=y
job division: f 7(x, y) results collection: => f 7(x+1, y) System. out. print(x); f 7(x+1, y); System. out. print(x); result reporting: none Terminating condition: x >=y public static void f 7 ( int X, int y) { if (x>=y) System. out. print(x); else { System. out. print(x); f 7(x+1, y); System. out. print(x); } }
- Slides: 35