ࡱ> MOJKL ubjbj ;ws=LL  8 d?"| "~9$(a$a$a$<%6r,$--//////$pS9 *.<%<%*.*.S a$a$P<P<P<*.^ a$ a$-P<*.-P<P<Ya$P/ 4}0Z:YYx H*.*.P<*.*.*.*.*.SSh;*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.L U: EECS110 Homework 2, Spring 2009 Due: 11:59pm on Sunday April 19, 2009 Submission: submit your solutions at HYPERLINK "http://bullfrog.cs.northwestern.edu/cs2/login.htm"the submissions server If you are working on lab problems, please go to:  HYPERLINK "http://cs.northwestern.edu/~akuzma/classes/EECS110-s09/lab/lab2/lab2.htm" http://cs.northwestern.edu/~akuzma/classes/EECS110-s09/lab/lab2/lab2.htm You should do the first problem for Lab1. Problems: HYPERLINK "hw2pr1.htm"Problem 1: Integration! (hw2pr1.py) [35 points; individual or pair] Week 2, Problem 1: Numeric Integration [35 points; individual or pair] Note: There is a lot of explanation and text in this lab. All the functions that you have to write in your hw2pr1.py file are labeled with PN. (where N is the problem number, e.g., 1, 2, 3, etc) and set off with a horizontal line like this:  P0. This indicates a function to write in your hw2pr1.py file. The goal of this lab is to build a program in Python that can do numerical integration of functions. The lab is designed to exercise the following skills: using Python to write functions composing functions, i.e., extending or adapting old one to meet new requirements applying functions to lists of inputs, i.e., list comprehensions or "map" breaking down a large problem (numerical integration) into several smaller problems Before you begin, you need to set up your new file. Please create a new file in the IDLE editor called hw2pr1.py and at the top of that file insert a header of comments that includes your name, the date, and the name of the file. For example: # April 14,2009 # John Smith # hw2pr1.py -- done in lab Overview Integration is often described as finding the area between a mathematical function and the horizontal axis. This area is a single-value summary of the magnitude of the function across its independent variable. First, we present below a simple example of estimating an integral. Then, you will write an "integrator" function that works in general. Recall the dbl function that we discussed last week: def dbl(x): """ input: a number x (int or float) output: twice the input """ return 2*x Suppose you wanted to estimate the integral of the dbl function, between 0.0 and 10.0. You could do the following.  INCLUDEPICTURE "http://www.cs.hmc.edu/~cs5grad/cs5/images/lab2plot.png" \* MERGEFORMATINET  Divide the interval into 4 parts. Then the list [0, 2.5, 5, 7.5] represents the x value of the left-hand endpoint of each part of the interval. Find the y-values from dbl(x) for each possible x in the list of left-hand endpoints above. These will be Y = [0, 5, 10, 15]. Add up the areas of the rectangles whose upper-left-hand corner is at these Y values. Each rectangle extends down to the x-axis. Since there are four equal-width rectangles spanning a total of 10 units of width, each rectangle's individual width is 2.5. We find the rectangles' areas in the usual way. Their heights are contained in the list Y and their widths are 2.5, so the total area is 0*2.5 + 5*2.5 + 10*2.5 + 15*2.5 or (0 + 5 + 10 + 15)*2.5 which is (30)*2.5, or 75. Although this is quite a rough approximation for the integral, as the width of the rectangles gets smaller and smaller, it approximates the true integral more and more closely. Furthermore, the simple example above suggests a general way we can divide the problem of general numeric integration into pieces that we know how to write programs to solve. That is: Divide the interval in question into N equal parts and create a list with the corresponding x values. Find the y values of the function for each value of x calculated in step 1 Calculate the area of each rectangle under the curve (bounded by the two x values on either side and the y value of the leftmost x value) Sum the areas and return the value The rest of this lab involves writing functions to compute each of the four steps above (and optionally, to make the integral approximation slightly better) and then answering some questions about the results your integration approximation produces. Step 1: Calculating the x values to be evaluated Our goal here is to write the function steps(low,hi,N), which takes in two numbers low and hi and a nonnegative integer N and returns a regularly-spaced list of N floats starting at low and going up to, but not including, hi itself. This list will give us our x values (an number we want) within a given range (whatever range we want). At first you might think that a good way to approach this problem is to use the range function directly (recall that range(low, hi, step) returns a list of integers starting at low, up to but not including hi, step apart from each other.) Unfortunately, range returns a list of integers and we need a list of floats, so a single call to range will not suffice. Instead, we will again break up this problem into two pieces: generate a list of N evenly spaced floating-point numbers starting at 0.0 and going up to but not including 1.0 adjust this list so that it spans the correct low, hi range.  P1. To solve step 1 above, in your hw2pr1.py file, write fracSteps(N), which should output a list of N evenly spaced floating-point values starting at 0.0 and going up to, but not including 1.0. N will be a positive integer. Here are some examples: >>> fracSteps(4) [0.0, 0.25, 0.5, 0.75] >>> fracSteps(8) [0.0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875] >>> fracSteps(256) (lots of floating-point numbers!) NOTE: You should NOT use recursion to implement this function. A good strategy here is to use a list comprehension and the range command we looked at in class. For example: [ float(x)/2 for x in range(5) ] will produce the list [0.0, 0.5, 1.0, 1.5, 2.0] Recall that what's happening here is that range(5) is producing the list [0, 1, 2, 3, 4] and each of those values gets passed in as x to the function float(x) / 2, resulting in the list [0.0, 0.5, 1.0, 1.5, 2.0]. If we change either the list that gets produced, or the function that operates on the elements of the list, we will get a different result. WARNING: Compare the above result to: [ x / 2 for x in range(5) ] which produces [0, 0, 1, 1, 2] Make sure you understand why. Your list comprehension for this problem will look something like: [ for x in range(N)] If you want a step-by-step introduction to list comprehesions, check out the HYPERLINK "../../misc/ListComprehensions.htm"ListComprehension page.  P2. Now write steps(low,hi,N), which should take in two numbers low and hi and a nonnegative integer N. Then, steps should return a regularly-spaced list of N floats, starting at low and going up to, but not including, hi itself. Hint: You will want to incorporate low into TWO places in your code. What is the importance of hi-low ? We would suggest getting rid of range at this point. Try writing your return statement to include a list comprehension that looks like the following (you'll need to fill in the missing portion (marked by ___), of course!) [_______________for x in fracSteps(N) ] In essence, steps is basically a floating-point version of the built-in function, range. Here are some examples of how your steps function should work: >>> steps(0,10,4) [0.0, 2.5, 5.0, 7.5] >>> steps(41,43,8) [41.0, 41.25, 41.5, 41.75, 42.0, 42.25, 42.5, 42.75] Step 2: Calculating the y values Now that we have our x values, we need calculate the y value of the function at each of these x positions. We'll again use list comprehensions to make this process simple and fast! Although our goal is to handle arbitrary functions, we'll start with a concrete function and build up.  P3. Write a function dbl_steps(low,hi,N) that will double each of the values in the list that your steps function creates. Again, try to use a list comprehension that takes advantage of your steps function. That is, consider how you could use [ ... for x in steps(low,hi,N)] in writing dbl_steps. This may turn out to be less difficult than it seems at first glance. Here is an example: >>> dbl_steps(0,1,4) [0.0, 0.5, 1.0, 1.5]  P4. Write fsteps(f,low,hi,N), which should do the same thing as dbl_steps, but with an arbitrary function f that is passed in as the first input. You might be best off copying dbl_steps and changing it. Here are some examples: >>> fsteps(dbl,0,1,4) [0.0, 0.5, 1.0, 1.5] >>> import math >>> fsteps(math.sin,0,math.pi,6) [0.0, 0.5, 0.87, 1.0, 0.87, 0.5] (note: the above values are rounded versions of what actually gets displayed!) >>> fsteps(math.exp,0,3,3) [1.0, 2.7182818284590451, 7.3890560989306504] # run dir(math) for the math functions (after "import math") # run help(math.sin) for a bit more description of any f'n >>> fsteps(dbl,-10,10,500) [-20.0, ... 499 more list elements ...] You might note that if you wrote fsteps first, then you wouldn't need to write dbl_steps -- you could just use fsteps with dbl as the initial input. This kind of generality is sometimes a good thing... . However, some people find that they like to write a couple of specific examples before generalizing. Visualizing your functions Now that you can generate x and y values for your functions, it would be nice to see them plotted graphically. Please follow the link below that describes how to plot your functions in python. There's nothing to submit in this part, but throughout the rest of the lab it will be nice to have the ability to visualize your functions and your integration approximations. When you understand how to plot functions, please return to this page and continue the lab. HYPERLINK "../../misc/CSPlotOverviewLab2.htm"Click here to go the EECS 110 Plot Page Steps 3+4: Calculate the area of the rectangles under the curve and putting it all together Now that you can calculate the x values and the corresponding y values for functions of 1 input, you are ready to do the last two steps--use these values to calculate the area of the rectangles they form, and then sum these areas to compute the integral approximation.  P5. Write the function finteg (described in more detail below). Its behavior just generalizes the step-by-step integration example depicted and described above. You will want to use built-in functions and functions that you've already written in previous parts of this lab! Feel free to simply copy this function signature and docstring as-is and then fill in the return statement: def finteg(f,low,hi,N): """ finteg returns an estimate of the definite integral of the function f (the first input) with lower limit low (the second input) and upper limit hi (the third input) where N steps are taken (the fourth input) finteg simply returns the sum of the areas of rectangles under f, drawn at the left endpoint of the N steps taken from low to hi """ Hints: This function will be VERY short, but it can be a little tricky to write. Go very carefully through the example at the start of this lab, matching the concrete numbers in that example with the inputs to finteg . What corresponds to what? Also, don't rewrite your fsteps function from the previous part of this lab - simply use it. If you use fsteps , the finteg function does not need list comprehensions or map or recursion at all...but sum will be useful. Here is how sum works: >>> sum( [10, 4, 1] ) 15 >>> sum( range(0,101) ) 5050 Here are some examples to check. >>> finteg(dbl,0,10,4) 75.0 Help - I get 60 instead of 75!! You may be dividing an int by an int with a resulting rounding error... Multiply low by 1.0 to create a float value, for example. >>> import math >>> finteg(math.sin, 0, math.pi, 1000) 1.9999983550656628 # pretty good - should be 2.0 >>> finteg(sq,0,3,1000000) # a million steps will give it pause 8.9999865000044963 # close! - should be 9.0 Questions to answer in your hw2pr1.py file The last required part of the lab (and HW problem 1) involves using your finteg function to answer a number of questions. You should put your answers either within comments or within triple-quoted strings in your hw2pr1.py file. Strings are easier because you don't need to preface multiple lines with the comment character, #. The first problem is done in a string as an example:  Q0. Explain why the true value of the last example should be 9. The answer in the hw2pr1.py file would look like: """ Q0. The "true value" of finteg(sq,0,3,1000000) -- that is, the integral of sq(x) from a low limit of 0 to a high limit of 3 -- equals x**3 / 3.0, evaluated at 3.0 MINUS x**3 / 3.0, evaluated at 0.0 These evaluate to 27.0/3.0 - 0.0, which equals 9.0 """  Q1. The following function, c, traces the upper arc of a semicircle from -2 to 2 : def c(x): return (4 - x**2)**0.5 Place this function into your hw2pr1.py file and confirm the values of >>> finteg(c,0,2,2) 3.7320508075688772 >>> finteg(c,0,2,20) 3.2284648797549815 Next, find the values of finteg(c,0,2,200) and finteg(c,0,2,2000) . As N goes to infinity, what does the value of this integral become?  Q2. Sometimes, integrals without closed-form solutions are so important that we simply define a function to be their solution! The natural log, sometimes written ln(x) is one such example. It is defined as  INCLUDEPICTURE "https://www.cs.hmc.edu/twiki/pub/CS5/Lab2Integrated/natlog.jpg" \* MERGEFORMATINET  This function is a built-in part of the math library under the name math.log(x). Write a Python function ln(x,N) that uses your finteg to compute the natural log of x using N steps. How accurate are ln(4.2,100) and ln(4.2,10000) in comparison with the real value of math.log(4.2)? Note: You should include ln(x, N) in your hw2pr1.py file, but what we are really interested in is the answer to the above question. (You just need to write this function to answer the question.)  Q3. Using finteg as a guide, write a new function, finteg_tr, that uses a trapezoid for each small interval, instead of rectangles.  Submission You should submit your hw2pr1.py file at the HYPERLINK "http://bullfrog.cs.northwestern.edu/cs2/login.htm"Submission Site. This is the end of Lab1. The rest of the problems are the part of Homework 2, also accessible here:  HYPERLINK "http://cs.northwestern.edu/~akuzma/classes/EECS110-s09/hw/hw2/homework2.htm" http://cs.northwestern.edu/~akuzma/classes/EECS110-s09/hw/hw2/homework2.htm HYPERLINK "hw2pr2.htm"Problem 2: The Sleepwalking Student (hw2pr2.py) [35 points; individual or pair] Week 2, Problem 2: The sleepwalking student [35 points; individual or pair] filename: hw2pr2.py For this problem, you will write functions to simulate and investigate the behavior of a sleepwalking student (more formally known as a "random walk"). You should place these functions in a file named hw2pr2.py. Part 1. First function (just to copy) rs() Near the top of your file, be sure to have the following: import random # this can go anywhere at the top of the file def rs(): """ rs chooses a random step to make and returns it notice that rs() requires parentheses, but takes no inputs at all! """ return random.choice([-1,1]) You will thus be able to call on this rs() function whenever you want to obtain a new, random step. A big advantage of this is that it will be extremely easy to change what is meant by random step in the future. As long as all the rest of your code uses rs, you will be able to change the one line in rs in order to take much bigger or smaller random steps. An alternative is to use the line from random import * If you use this line instead of the one above, you will not need to include the random. in front of calls to choice or other functions within the random module. For this problem, string multiplication is very useful here. Here is an example to remind you how this works. The example with the 10 spaces shows how you can position text further to the right on the screen. >>> 'spam'*3 spamspamspam >>> 'start' + ' '*10 + 'end' start end Similar to this last example, you will want to multiply the string ' ' (consisting of one space) by different values for some of the functions below. Part 2. Second function (to write) rwPos Write a function named rwPos( start, nsteps ) which takes two inputs: an integer start, representing the starting position of our sleepwalker, and a nonnegative integer nsteps, representing the number of random steps to take from this starting position. The name, rwPos is meant to suggest that this function returns the position of a random walker. Be sure that your rwPos does return the position of the sleepwalker after nsteps random steps, where each step moves either plus 1 or minus 1 from the previous position. Printing/debugging code to include: As part of your rwPos function, include a line of debugging code that prints what s is each time the function is called. See the examples below for what this might look like. Examples: >>> rwPos( 40, 4 ) start is 40 start is 41 start is 42 start is 41 start is 42 42 >>> rwPos( 40, 4 ) # won't be the same each time... start is 40 start is 39 start is 38 start is 37 start is 36 36 Even if you are comfortable using while or for loops, you should use recursion to implement rwPos for this problem. This is because this assignment ultimately exercises the functional and recursive style of computational problem-solving. There will be plenty of loops later in the term... . Part 3. Third function to write rwSteps Write rwSteps( start, low, hi ) which takes three inputs: an integer start, representing the starting position of our sleepwalker, an integer low, which will always be nonnegative, representing the smallest value our sleepwalker will be allowed to wander to, and an integer hi, representing the highest value our sleepwalker will be allowed to wander to. You may assume that hi e" start e" low . As soon as the sleepwalker reaches at or beyond the low or hi value, the random walk should stop. When it does stop, rwSteps should return the number of steps (hence the "Steps" in its name) that the sleepwalker took in order to finally reach the lower or upper bound. Printing/debugging code: As part of your rwSteps function, you should include a line of debugging code that prints a visual representation of your sleepwalker's position while wandering. Feel free to be more creative than the simple 'S' in the example below. For example, consider 0->-< (a true sleepwalker!) Examples: >>> rwSteps( 10, 5, 15 ) S S S S S S S S S S 9 # here is the return value! >>> rwSteps( 10, 7, 20 ) S S S S S S S S S S S S 11 Again, you should use recursion to implement rwSteps for this problem. Hint: this problem is tricky because you are adding a random step and adding to the ongoing count of the total number of steps. One suggestion for the recursion is to use the call rwSteps( newstart, low, hi ) as the recursive call, with an appropriate assignment to newstart on the line above it... . Need more time or space? You can get more memory for recursion by adding this to the top of your file: import sys sys.setrecursionlimit(50000) This provides 50000 function calls in the recursive stack. You can also slow down the simulation by adding this line to the top of your file: import time Then, in your rwSteps or rwPos functions, you can include the line time.sleep(0.1) which pauses for 0.1 second. Adjust as you see fit! Part 4. Analysis of random walks With these three functions working, you have the computational raw materials to start investigating these two (closely related) questions: What is the average final signed-displacement for a random walker after making N random steps? The "signed-displacement" is the signed (positive or negative) distance from the initial starting point. This is just the output of rwPos. Do not use abs. What is the average square of the final signed-displacement for a random walker after making N random steps, in terms of N? Be sure you square before you average the values. You should adapt the random-walk functions you wrote to investigate these two questions. In particular, you should Write versions of rwPos and rwSteps that do not print any debugging or explanatory information. Rather, they should just return the final position or number of steps, respectively. Call these new versions rwPosPlain and rwStepsPlain . Be careful! the recursive calls will need to change, too... . Come up with a plan for how you will answer these questions. This plan should include writing at least one additional python function other than those written above. For example, you might consider writing a function that collects a lot of data and then presents a useful summary of that data -- perhaps using map or a list comprehension. Implement and test your additional function(s) to help your investigation. Report the answers you find from these computational tests. To do this, place your answers inside your python program file by either making them comments (using the # symbol) OR, even easier, including them in triple-quoted strings (since they can include newlines). For example, """ In order to compute the average signed displacement for a random walker after N random steps, I ... (briefly explain what you did and your results) (1-2 sentences for each question is OK) """ Thus, your file should include (1) answers to these two questions and how you approached them and (2) your python functions including whatever additional function(s) you wrote to help answer these questions. Make sure to include explanatory docstrings and comments for every function that you write! Please include any references you might have used - you're welcome to read all about random walks online, if you like. However, you should also feel free not to bother - whether your answers are correct or not will have no effect on grading this problem. It will be graded on whether your functions work as they should, whether they would be helpful in answering those questions, and in the clarity and effectiveness of your write-up. Submission You should submit your hw2pr2.py file at the  HYPERLINK "http://bullfrog.cs.northwestern.edu/cs2/login.htm" Submission Site. HYPERLINK "hw2pr3.htm"Problem 3: Recursive Rendering (hw2pr3.py) [30 points (+ 15 extra points); individual or pair] Week 2, Problem 3: Python Bonsai [30 points + 15 points (extra); individual or pair] filename: hw2pr3.py This problem asks you to create two classic kinds of recursive images: a spiral and a tree made of line segments (and optionally the Koch Snowflake). If you are so inclined, you can make your tree more realistic than just a stick tree and get extra credit. On a typical computer, the turtle drawing module is installed and ready to use. (If for some reason your computer doesn't have turtle installed, then you can use the csturtle module instead. To learn more about how to get csturtle, go HYPERLINK "../../misc/CsturtleDirections.htm"here.) To learn how to use turtle and to see all of it's commands, click HYPERLINK "../../misc/TurtleDirections.htm"here. Note: When you run a program with turtle commands, a special window will open where the drawing will take place (This window may "hide," appearing BEHIND the other windows). If you run the program again, that same window will be used again. However, when you want to finally close that drawing window, you must first type done() at the IDLE prompt. Then you can close the window (for example, by clicking on the red circle at the top left of the window on a Mac). To simplify grading, please be sure to name your functions as specified in these problems... . The graders thank you!! Part 1 Write a function spiral( initialLength, angle, multiplier ) that uses the csturtle drawing functions to create a spiral that has its first segment of length initialLength and whose neighboring segments form angles of angle degrees. The multiplier will be a float that will indicate how each segment changes in size from the previous one. For example, with a multiplier of 0.5 each side in the spiral should be half the length of the previous side. The spiral should stop drawing when it has reached a side length of less than 1 pixel or greater than 1000 pixels... . Part 2 "The fallen tree" the idea here is to create a function that draws the side-view of a tree: svTree( trunkLength, levels ) Here is an example of the output from my function when svTree( 128, 6 ) is run:  INCLUDEPICTURE "http://www.cs.hmc.edu/~cs5grad/cs5/images/tree1.gif" \* MERGEFORMATINET  and another example of the output when svTree( 50, 2 ) is run:  INCLUDEPICTURE "http://www.cs.hmc.edu/~cs5grad/cs5/images/smalltree.jpg" \* MERGEFORMATINET  Note that these are really side view! Of course, calling left(90) before the call to svTree will yield a more traditional pose... . The key thing to notice about both of these pictures is that the pen is back at the start (root) of the tree at the end of the function call! This is the key to all happiness when specifying recursive images! One thing not to worry about is the number of branches (anything greater than 1 is OK), the exact angle of branching, the reduction of the trunkLength in sub-branches, etc. Design your own tree by making aesthetic choices for each of these. Submission You should submit your hw2pr3.py file at the  HYPERLINK "http://bullfrog.cs.northwestern.edu/cs2/login.htm" Submission Site. Not enough? Extra credit options... Choice 1: Your own recursive designs... [15 points, individual or pair] For extra credit of up to 5 points, feel free to design and implement your own recursive artwork. One starting point might be "sprucing up" your svTree function further by adding other cool features. We're "pining" for some interesting variants. If you do add extra features to your tree -- or create any other work -- make sure to "fir"nish us with a comment at the very top of your code indicating what you did and how to invoke your function. Consider using the fill and color settings or changing the theme away from trees completely. The HYPERLINK "../../misc/CsturtleDirections.htm" \t "_top"CS turtle reference page provides documentation for the functions available from the turtle module. See the description of a function name on that page. Choice 2: The Koch curve [15 points, individual or pair] A more focused task for an additional possible 5 points extra credit is to create a function named snowflake(sideLength, levels) The idea is that snowflake will draw levels recursive levels of the Koch Snowflake, a fractal curve that is described  HYPERLINK "http://www.jimloy.com/fractals/koch.htm" \t "_top" here, among other places on the web. Basically, a Koch snowflake of level 0 is simply an equilateral triangle with side length equal to sideLength. Each increment of level replaces the middle third of all of the snowflake's sides with a "bump" that is, itself, a smaller equilateral triangle. One hint that may or may not be helpful to you is that in our solution, we write a helper function called snowflakeSide( sideLength, levels ) that draws just one side of the underlying equilateral triangle. Then, the snowflake function was quite similar to the tri() example from class. The key recursion occurs in snowflakeSide. This division of labor is not required, however - there are a number of alternative ways to organize it. Here are four steps of the Koch curve's progression:  INCLUDEPICTURE "http://www.cs.hmc.edu/~cs5grad/cs5/koch.png" \* MERGEFORMATINET  Submission You should submit your hw2pr3.py file at the  HYPERLINK "http://bullfrog.cs.northwestern.edu/cs2/login.htm" Submission Site. Overall Instructions Each of these questions asks you to write several short Python functions and/or an English response. Please place all of your answers for problems 2 and 3 into a Python plain-text file named hw2pr2.py , hw2pr3.py (changing the problem number as appropriate). Please use the function names suggested by the problems - this will help us grade things! Docstrings and Comments Every function that you write must have a docstring. The docstring should explain how many inputs the function takes, what these inputs are supposed to be, and what the function returns. The doctring is intended for the user of your function. In contrast, comments in your code are used to explain details that are important to a programmer who might be reading your code (that "programmer" could be you - it's easy to forget what you had in mind when you wrote your code!). Any function that is doing anything even modestly complex or non-obvious deserves some explanatory comments. We'll look for your docstrings and comments, so be sure to include them. A Note on using Recursion This assignment exercises the facility to write functions recursively. If you have some programming experience, you may be familiar with other, non-recursive strategies fo !%8=?@EFGHlmϽϽpaR@/ h6hveKCJOJQJ^JaJ#h6h65CJOJQJ^JaJhveK5CJOJQJ^JaJh;45CJOJQJ^JaJhjD5CJOJQJ^JaJhOgT5CJOJQJ^JaJh65CJOJQJ^JaJ#h6hveK5CJOJQJ^JaJh6CJOJQJ^JaJ#h6hveK5CJ OJQJ^JaJ #h6h65CJ OJQJ^JaJ h;45CJ OJQJ^JaJ hjD5CJ OJQJ^JaJ  !GH 0 1 2 { | } o q M n a  & F9gdgd"gd"gdQw"gd6mn N P Q Ꞑp_pLp; h6hQwCJOJQJ^JaJ$hzhQw0JCJOJQJ^JaJ hQwhQwCJOJQJ^JaJ#jhQwCJOJQJU^JaJhQwCJOJQJ^JaJhGCJOJQJ^JaJ h6hveKCJOJQJ^JaJ)h6hveKB*CJOJQJ^JaJph"U/jh6h CJOJQJU^JaJh CJOJQJ^JaJ)jh6hveKCJOJQJU^JaJ         % ɻɑqf[fqJsUh5CJOJQJ^JaJ#hsh5CJ OJQJ^JaJ hjCJOJQJ^JaJhLCJOJQJ^JaJhveKCJOJQJ^JaJ h6hveKCJOJQJ^JaJhCJOJQJ^JaJt UV`e+\]tuxyVWƾưzווkkjhUhCJUaJ hUh0JCJOJQJaJh0J.CJaJhUhCJaJh*ph5CJOJQJaJhCJOJQJ^JaJh0J.CJh=h0J.CJ h0J.hUh0JCJaJhUh0J.CJaJhUhCJOJQJaJ(a UVfs+,8]uyZjQ" & F:gd & F;gd "^`gd"`gd"gd" gdgdWXYZ TUgj+,./cdgi46>?GIKLNQ "ֺֺǩֺֺֺֺǩֺֺֺֺֺ֜ǜhUh0J.CJaJ hUh0JCJOJQJaJhUh0JCJaJhUhCJOJQJaJhUhCJaJjhUhCJUaJj#hUhCJUaJ="*+,-UVWXln23Lrsʼsb h.h0J.CJOJQJaJh.h0J.CJaJh.hCJaJh.hCJOJQJaJ#h.h0J.5CJOJQJaJh.h5CJOJQJaJhCJOJQJ^JaJh<\hCJOJQJaJhUh0J.CJaJhUhCJaJhUhCJOJQJaJ#"nLE-`atEg & F<gd"gdgd & F:gd()*,-OPQR&'MNQSjkmostCEXY٩٩蚉 h>)h0J.CJOJQJaJh>)hCJOJQJaJ h.h0JCJOJQJaJh.h0J.CJaJ"h.h6CJOJQJ]aJh.hCJOJQJaJh.hCJaJh.h0JCJaJ6Yhv"#./;=Z[\]jkyzԸԧԘԘԋԘԘzԘԘԋԋ h.h0JCJOJQJaJh.h0JCJaJh%jhCJOJQJaJ h.h0JCJOJQJaJj h.hCJUaJh.h0J.CJaJh.hCJaJ#h&h0J5CJOJQJaJh>)hCJOJQJaJ0  CEeg~RSln  " = ? O ^ ` ϺyyyhKXhCJOJQJaJ h.h0JCJOJQJaJh&hCJOJQJaJ#h&h0J5CJOJQJaJ)hw%6hB*CJOJQJ^JaJphfffh0J.CJaJh.h0J.CJaJh.hCJaJh%jhCJOJQJaJ/g~" ? O `  !!#s$t$$$$$$$%$&&&''''"gdgd 4!5!6!c!d!e!v!w!x!}!!!!!!!!!!!!!!!!!!!!!!!!!!""Ͻ׬{l_l_l_l_l_lh.h0JCJaJhe4hCJOJQJaJ he4h0JCJOJQJaJ h.h0JCJOJQJaJjAh.hCJUaJ h.h0JCJOJQJaJ#jt h.hCJUaJhCJaJjh.hCJUaJh.hCJaJhehCJOJQJaJ%"" "3"4"7"8"I"P"Q"Z"["\"^"_"f"i"m"""""""""""""""##########+$ǹ٧َن{llh!hCJOJQJaJhe4h0J.CJh0J.CJhCJOJQJaJh.h0J.CJaJ"he4h5CJOJQJ\aJh.h6CJ]aJ"he4h6CJOJQJ]aJhe4hCJOJQJaJh.hCJaJh.h0JCJaJ*+$,$1$3$U$V$[$\$r$s$$$$%$&%&&&)&;&N&&&&&'8'ٷ̢l[NANAh!Uh0JCJaJh!Uh0J.CJaJ h!Uh0JCJOJQJaJ%jh!UhCJOJQJUaJh!UhCJOJQJaJh!Uh5CJOJQJaJh)h&%hB*CJOJQJ^JaJphfff)h+hB*CJOJQJ^JaJphfffh.h0J.CJaJh!hCJOJQJaJh.h0JCJaJh.hCJaJ8'D'M'g'k''''''''''("(C(D((((k)l)*******++ +++++ŻŻŻmahCJOJQJaJ)h6n<hB*CJOJQJ^JaJphfff h!Uh0JCJOJQJaJ%jyh!UhCJOJQJUaJ)hAhB*CJOJQJ^JaJphfffh0J.CJaJh!Uh0J.CJaJ"h!Uh6CJOJQJ]aJh!Uh0JCJaJh!UhCJOJQJaJ$''(((((()<))))))*N*O*j**+++- . .g.u/w/"gdgd++++,,-----------.. . .g...Ǟn^ODh:/hCJaJh:/hCJOJQJaJh:/h5CJOJQJaJ h:/hCJOJQJ^JaJh0JCJOJQJaJ h!Uh0JCJOJQJaJ+jh!UhCJOJQJUaJ%jh!UhCJOJQJUaJhCJOJQJaJh!Uh0J.CJaJh!UhCJOJQJaJh!Uh5CJOJQJaJ.......s/u/v/w/z////0000000011.1>1F1G1j1k1r11111122T2U2c2d2g2h2i2o2٧菇u"h:/h5CJOJQJ\aJh0J.CJh:/h0J.CJh:/h0JCJaJ"h:/h6CJOJQJ]aJ h:/h0JCJOJQJaJjh:/hCJUaJh:/hCJOJQJaJh:/hCJaJh:/h0J.CJaJ.w/001d2h2i2_3U4V4l4o4p444444444q555556F6"^gd"gdgdo222:3;3A3D3]3_3e3r3x3~3333333334 4 4 4&4'4*4+4:4=4H4I4L4M4S4U444444444555 5ԨԨǞǞNj|h(hCJOJQJaJ%h(hB*CJOJQJaJphh0J.CJaJh:/h0JCJaJ"h:/h5CJOJQJ\aJh:/h0J.CJaJh:/hCJaJ#h:/h0J5CJOJQJaJh:/hCJOJQJaJ0 55555?5B5C5p5q555555(6-6F6G6H6d6m6t666I7R7777νάxkx^x^xhQ8h0JCJaJhQ8h0J.CJaJhQ8hCJOJQJaJ hQ8hCJOJQJ^JaJhQ8h5CJOJQJaJh h:/hCJOJQJ^JaJh:/haJh0J.CJh(h0J.CJh:/h0J.CJaJh:/hCJaJh(hCJOJQJaJF6G6H6t677h8i88959h9l9n9999+:?:R:S:h:{:;;Z=> >"`gdgd"gd7777H8Q8h8i888889959G9l9m9n9q999999999999: :*:+:z:{:::::::;;ݿݿݿݿݿݴݿݿݿݿݿq%jhQ8hCJOJQJUaJ)hghB*CJOJQJ^JaJphfff%jhQ8hCJOJQJUaJh0J.CJhQ8h0J.CJhQ8h0J.CJaJ hQ8h0JCJOJQJaJhQ8hCJOJQJaJ%j~hQ8hCJOJQJUaJ,;; ;;;;;;<<<=<><<<<<<<<<<<===$=J=W=s={===>> >#>*>0>S>\>>>񻨻{h%jhQ8hCJOJQJUaJ%jGhQ8hCJOJQJUaJhQ8h0J.CJaJhQ8h0JCJaJ%jRhQ8hCJOJQJUaJ%jhQ8hCJOJQJUaJ"hQ8h5CJOJQJ\aJ hQ8h0JCJOJQJaJhQ8hCJOJQJaJ( >>>>>2?3?4?N?O??C@D@E@@@AAAABQBBBBB"`gdcgdc"gdc"gdj"gd6gd>>>>>>>>>>>?? ?/?0?1?2?4?̹}qiZqPqiE7hCJOJQJ^JaJhhjOJQJh0JOJQJjhOJQJUhOJQJjhOJQJU$h0J56CJOJQJ^JaJhh0J.CJh0J.CJ*h=h0J56CJOJQJ^JaJ$hpZhCJOJQJ^J_HaJh5CJOJQJ^JaJ0hQ8h0J56@CJOJQJ\]aJhCJOJQJaJ4?L?M?N?O?w?????????A@B@D@E@F@\@ߵߣnYKh.CJOJQJ^JaJ)jh6hveKCJOJQJU^JaJ h6hjCJOJQJ^JaJ$hzhe0JCJOJQJ^JaJ heheCJOJQJ^JaJ#jheCJOJQJU^JaJheCJOJQJ^JaJhCJOJQJ^JaJhRCJOJQJ^JaJhjCJOJQJ^JaJ#hRhj5CJOJQJ^JaJ\@]@^@i@@@@@@@@@@@@@@@Ҡyk]yOA/#hshc5CJ OJQJ^JaJ hdCJOJQJ^JaJhveKCJOJQJ^JaJhECJOJQJ^JaJhI'CJOJQJ^JaJ h6hveKCJOJQJ^JaJh hEa0J.CJh hy&0J.CJhy&CJOJQJ^JaJ#h.B*CJOJQJ^JaJph"U#h\<B*CJOJQJ^JaJph"U)jh6hveKCJOJQJU^JaJ/jlh6h.CJOJQJU^JaJ@@@@@@@@@AAAAAAAAAABBBBQB̾uku`P`B`hJhc0J.5CJaJhghc5CJOJQJaJhghcCJaJhc0JCJaJhghc0JCJaJhghcCJOJQJaJ hghcCJOJQJ^JaJhq hc0J.CJ h6hcCJOJQJ^JaJhcCJOJQJ^JaJ#h>sUhc5CJOJQJ^JaJ#hshc5CJ OJQJ^JaJ hc5CJ OJQJ^JaJ QB_BBBBBBBBCCC0C1CVCWC[C\CCC.D/D1D3D]D^D`DaDDDDE E E'EǺҨǺǙǺǙ}h[hghc0JCJaJ(hQMhc56CJOJQJ\]aJhQMhc0J.CJ hQMhc0J.CJOJQJaJhQMhcCJOJQJaJ#hghc0J5CJOJQJaJhghc0J.CJaJhghcCJaJhghcCJOJQJaJhcCJOJQJaJhghc0J.CJhc0J.CJ"BBCC0C1CDDDqECFPF]F^F{FFF%GOGXI:JMJYJeJqJ}JJJ"gdcgdc"`gdc'E(Egdcgdc & F=gdcYY Y YYYYY!Y$YYYYYYYYYYT[U[X[Y[q[s[d\e\f\\\\\]]?]@]o]p]]]]]]^"^`'`v hSxhc0JCJOJQJaJ hSxhc0JCJOJQJaJhSxhcCJOJQJaJhc0J.CJhSxhc0J.CJhghc0JCJaJ"h5hc5CJOJQJ\aJh5hcCJOJQJaJhghc0J.CJaJhghcCJaJ.'`~````````````aa a a aѾpepVpeH7 h6hLCJOJQJ^JaJhdCJOJQJ^JaJhd-FhcB*OJQJph"Uhd-FhcOJQJjhd-FhcOJQJUhcB*CJOJQJ^Jphfff%hd-FhcB*CJOJQJ^Jphfff7hd-Fhc@ CJOJQJ\]^Jeh@r@$hd-FhcCJOJQJ^J_HaJ#hd-Fhc5CJOJQJ^JaJhcCJOJQJ^JaJhSxhcCJOJQJaJ a a"a#a$a/aBaCaEaGaHaNaOaQaSaZanazaaa겠ꒇ|k]kOkAkhEaCJOJQJ^JaJh CJOJQJ^JaJhI'CJOJQJ^JaJ h6hveKCJOJQJ^JaJh hEa0J.CJh hk10J.CJhk1CJOJQJ^JaJ#hN#3B*CJOJQJ^JaJph"U#hk1B*CJOJQJ^JaJph"U/j h6h.CJOJQJU^JaJh.CJOJQJ^JaJ)jh6hveKCJOJQJU^JaJaaaaaaaaaaaaaaaaaaaaab ccctczccñn_S_F_F_h\Ah\0J.CJaJh\CJOJQJaJh\Ah\CJOJQJaJ h\Ah\CJOJQJ^JaJh\0J.CJhq h\0J.CJ h6h\CJOJQJ^JaJh\CJOJQJ^JaJ#h>sUh\5CJOJQJ^JaJh\5CJ OJQJ^JaJ #hsh\5CJ OJQJ^JaJ hLCJOJQJ^JaJhveKCJOJQJ^JaJabddbfffff ghii&iiiiOjjjvkHl:m;mFmmmmG$gd\"gd\gd\ccccccddddd-d3d[d\ddddddddevѾ񰞋o\L\o=jhdh\OJQJUh\B*CJOJQJ^Jphfff%hdh\B*CJOJQJ^Jphfff7hdh\@ CJOJQJ\]^Jeh@r@$hdh\CJOJQJ^J_HaJ#hdh\5CJOJQJ^JaJh\CJOJQJ^JaJ%jWh\Ah\CJOJQJUaJ%jh\Ah\CJOJQJUaJh\Ah\0JCJaJh\Ah\CJOJQJaJ>v}v~vvvvvvvvhwmwnwqwtwywzw}w~wxx!xɻzpzazpzaUC#hEL9h+5CJOJQJ^JaJh+CJOJQJaJh+h+CJOJQJaJh+0J.CJaJh+h+0J.CJaJ h+h+CJOJQJ^JaJ#h+h+5CJOJQJ^JaJ h6hcCJOJQJ^JaJhcCJOJQJ^JaJhEL9CJOJQJ^JaJhdh\B*OJQJph"Ujhdh\OJQJUhdh\OJQJ!xxxxyzzzz{678:;=>@ACDEJKQRSTXYdeghjklm°~pkp`ppkp`p~~h<5mHnHu h)5jh)5CJUaJh~Ph)hx9jhx9Uh+hLCJaJU h8Qh+CJOJQJ^JaJ#h8Qh+5CJOJQJ^JaJh8QCJOJQJaJ$hEL9h+0JCJOJQJ^JaJh`xCJOJQJ^JaJ hEL9h+CJOJQJ^JaJ%r solving these problems. Even if you do know such non-recursive strategies, however, we ask that you use recursion to solve the problems on this assignment. After all, our primary goal here is to practice an important problem-solving concept and technique, not simply to solve these particular problems... .     Page  PAGE 2 of  NUMPAGES 27 679:<=?@BCDEijklmnopqrstu1/$a$/ dgd)gd+mnopqrstuh+hLCJaJhx9h~Ph)9 0182P:p). A!"#$% DyK yK |http://bullfrog.cs.northwestern.edu/cs2/login.htmyX;H,]ą'cDyK F hw2pr1.htmDdr <P  3 3"(( DdV  S 2Alab2plotb jZ+운3|eyn gjn jZ+운3|eynPNG  IHDR'x4iCCPICC Profilex?ha!ƢfjxQ&L\q].* vDEAE9! >=|~ u)[U8^M$aD۶Y7ru)[g՛[Kkގ@:Tk @Əd15%&qum  VK ݈ ;0bqu uV3:.h_ $J#$hw^`b}M-CB@&!E?" ϣ(~_~y vc ՀFq <+e8<ـ@|~p H͖,K7 cza廯@k_LG4s`sx:n^VuPT-O/vS^ϵcY4EuXIDATxmnQc11;bfL0WsN5dU/?~8m۷o0QTi4A Mu:HSTi4Aף?/;'T^ߤ7ߺc Ftb*ul>Eu^NlIA򷂽Tǫ ݣTi% 4SW?pNy}{EP^Qro_ҞU;wrxk,śº$䓧;@wwv7P[H I:78jzN E<(rMO@ɦyR(nwv =I=+|G^?<=ڍufc6669Z+ώm#>lڔ\Gq0V<CfxtgNs%Jʽ2B@tQEQEQE`Ox4f@ؼϋZKgZN_ܸ?bi+D{)gJ_2|IB[˴ƀ>(?|;ol.'Gv7}\)// +˗ie|TdOyG>7q U1N4riǖN@<}Oڶy߾Ms77OZ*Ko໶}O 855yյ/e|?uy16E0Bޱ"x{º/ faaj+X"`H.tO Ż={90e0FFG d|=*N:k"D/.nVQrRn̗_einm$fK`;#>ikkgWwx1QA$<(*5CM m5:;_0оhz&Ynv<'0$#8'hʈgnJ/qEUQ@Q@\.mfDd9W_DGݕ1钒~xM#A tree1tree1.gif b<0.Jqgvz"jn0.JqgvPNG  IHDR*^˦PLTE,xxxXp8`XPxxxphpK `hذذ8`иШааШTPX@PȠȰظЀ`8xHPPظx@ @ظظP𨠸pxp؀@8ذhx8x(08ب8hh` pH࠘ (X8p8x  ؘ@蘐(ؘxXЀ h؈PH""Lx$@`<(``Pt ؀؀P(008hxPtqxhxhxpphphphhh@ hX8x( h`X8p8TXT]%%@`88p@p5H88`88H@@8P8@PP8p(H((@ 8ȥ%"@8z%00Hd`ذаШH(HHd:X08H@@8PH@X8@hP88@h88d@ hP(00XXPhPP~2иpH*/-,,7v{ywv5VgNO9g)W:<8xMsڿ(WSK/|yWN7w;}>wߎ}; #|Qs_WJ ;_[xY r nX9ޜY4kμPX7qo=㶭ŝ*4YZs"\e㥕vw\ۂSNY%,.wo>f΁s+:Nzԩ?cK)L9/aWbh-,;Y~,Îʥ}~Ϙ}G1mSO޺(?hs7_t)1L\v']3,$I'?uןXyΟ~ܞ{N{çVVEK):%ԇGV}o(U85f{-?ՑG>zq`ewr̰5?o-eٕ.ݶ˷[y-[_Pr7*»h)/ɱd`UK|ef`@aK~-_iW63dHk@KH폹Xod 0؇dC2!߁ @}Hw {>$;؃f' EP}0 K"Po[[Sa~!C}KL65>bZ`z2$Cdڐ}9bj21XX !VDkB81k2]k!a`Q2g(ڝҐ!aXkC2$CwtT* W-td0u292 7z(! E22]UddhA@c A22D\F,c)U }jهf)ж CѲ !""$C2D8{M6d!Ca@^=򌐲9ӓ")/+^0dC*x^P =yr9هNd䑮dād#BNFLON|d4߿ CD/b /Ѓ+TP 2t^0(ɱTnAa4f>T+bvU%CA/U#(/ A2TcI!XҸ񛕯K)Q X& !6 0d8C1jz߳-"CW"}K#CKucB֐l !5> 6+aXC Tō0F/ e'0 7wm'Tԫ}J2KjQ|C/z+x#Cz_~FT:"PPbrP2A%~'/yJq$Pdʘ'" !d4+y}db鉰P<҉(F~6Gƃ 0aeC:c QcߢS y)Z Dk |V'yc_!Juh >J  Mc֊Qa aXQ$:cD _7FdX踴")N< !":O<"?-a@8[> *]} TK"Z(Aq!`@{OROn"KvHp,]4 *v^O'CCCoJH!ܤ~ח&pZ R,#lP(W=p ]wT2F`_؇ I݀8BrG؇mExIud(qi*>PUH)ioEdXxє& S qjɫ*j.C O0+bt}Z Q9TKC3%C̀Jj C%9$Iy[{5E1Br &$KrC°<*P$CMӚ9Qܼ*%a( DțJO.~/'0J#C?FIHN*b|Yp'VهBqd7@41JYC$C9q1D2ܫFBd"2Dji }k A !!7y#CG"hۣPٱT a(B E2tQ8H7*VG2V4&"(m7[zGe *G'@;d@BDf9Ue#dܙK#i$E!>C؇ꖎ 6+MF 5_W21u"bָ\W'C;[dhP!axa·a’֎=F($Ci242>- LO +ʺ9js }"j3 ̆ 708p@:2j,IƆґ!TcI246 Ktd0X #Cƒdhl8 L5$Cc`$HGS%p@:2j,IƆґ!TcI246 Ktd0X #Cƒdhl8 L5$Cc`$HGS%p@:2j,IƆґ!TcI246 Ktd0X #Cƒdhl8 L5$Cc`$HGS%p@:2j,IƆґ!TcI246 Ktd0X #Cƒdhl8 L5$Cc`$HGS%p@:2j,IƆґ!TcI246 Ktd0-\m8@?YIђdv_0>[!0y8l `<vS5 PXk[+-^DBnF+q=>4uFR?( ?;o+2TO)ߡG_m~fQG*SOJ/B( ̢T_m~QϝE9M?( ?;o+29PrQϝi>vVe)ߡG_m~fbQʃӋ|УN/B1F(Aii>vQߡYr4;o(Ӌ|ЬQ9Prqϝi>vVf(9M?8 ?;o+3bT_m~'_k~fr4K_(ҋ}-Ь{Qj9PM?( ?K_+3cڎT_k~Qϥj1G*SOJ/BI.t֚}'5Ԓx=TMƫ KU$ԺTԤdDԔ{m)HmQ㕥|ŀVX cҹδݾgL[ZMgn'h1o?VΉ82^H;ǥo] u[.^ }}kxjo}0PkW߭F =!Dfc|9w]48O\:u[hi:%R#J1!Tlqyu`1_ߪ]u4[jGF ,Ī<e:& 'vX.`p可AP6.mni0r32XE*鮢^b+7mU,3$ cɎ"֓j"qnm\N{WGG&/*B<[@s1UO¬mzU(?G]!-9?oWG~FT#sL_Uxb>GG]!-9?oQ}S9#ڏ#ں?B<[@s1T C?c'sGGtxb#ſ?G~ALO?Gh tbſ?G~A\O?R1dS Zſɘg?Y4(D11N k*$eV=:Җ{K:\2j28Ԑ98{cqZCyr,2[,"vɓxsx̋_Hu]<B_H8/~QJDĞ_'JSe~N58B$ە5R##= V;\~ g K>QRGqJ_F5K>xQ_B*Ӌ}Limk8/'W0 >?![ q]?S[_ < +ʱwiʟQh_ȹQV$Sߜ8řƖ/Sֻ̮֩'Nm?F+M&y$s=d>tdkYomd2.S=.?Hӿ>_H`x'BytfhϪ>u˼乪Ӳ̴>9,'v]O&c }~)4cuplddr2:E~^Qv>Fj{7MZJ񿁿o܇jײWg>_;_?ͅQ^iQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE|{Gg>/{lRQ_iCoYz/o܇^^77M9k+s/8O௟Š(4 ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (>Y#IE|)( 7_z7CdO䎜'WaEWtQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@,^褢>^?WP?GB󖽒w8~ӄ l(N((((((((((((((((((((((埋>^?Q{GgJHV_󖽒oo!rײW>_:p_?ͅQ^iQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE|{Gg>/{lRQ_iCj^= o!rײW S}?ZJGN++:B((((((((((((((((((((((~/{lRQG/J+(c#[g| S}?ZJ񿁿o܇^_;T~H|6QEyHQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE/J(#IE}S $yyz/o܇^^77M9k+s/8O௟Š(4 ( ( ( ( ( ( ( ( ( ( ( ( ( (zepZZǍO $< @(ZōE}cyA jirws$N39$gځTdE\(((((((埋>^?Q{GgJHV_󖽒oo!rײW>_:p_?ͅQ^iQEQEQEQEQEQEQEQEQE.|s\>{a9[[I@I+T>7)b{{E_xM:4 .$3/7 vXg?oEh9hg?oEh9hg?oEﯼjr4:& `|/toU_MO/uQ=ާB>өV{v+2eTMUzJԴ Jo m"ռA$)a1d$ J+t?Yzq/ȿ߸ r%nA<7V\[J6 dGhJ( ( ( ( ( ( (>Y#IE|)( 5o/W7M9k+r-{%|qS# QE!EPEPEPEPEPEPEPEPEPEPEPEPEPEPUl,|Aȏ:/{lRQ_iCj^= o!rײW S}?ZJGN++:B((((((((((((((((((((((~/{lRQG/J+(c#[g| S}?ZJ񿁿o܇^_;T~H|6QEyHQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE/J(#IE}S $yyz/o܇^^77M9k+s/8O௟Š(4 ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (>Y#IE|)( 5o/W7M9k+r-{%|qS# QE!EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP?|)(E%?O13оr-{%x7Cd?ߪ|$t? (Ӥ((((((((((((((((((((((gE%|^褢҇)?<ռ_z7CdO䎜'WaEWtQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@,^褢>^?WP?GB.WÖ'!ڭxu _bk2ʸLJϽ%غ8(}KE| {"(5_5}ME| {"h4bWxCQW5-@ EQ_G_gW?W?/"[+G%/D>SQ_,_?ox_Mؕ?|}ME| {"hbWxCQW5-@ E_G_gW?W?/&[+G%/D>SQ_,_?ox_Mؕ?|}ME| {"hbWxCQW5-@ E_G_gW?W?/&[+G%/D>SQ_,_?ox_Mؕ?|}ME| {"h4bWxCQW5-@ E_G_gW?W?/&[+G%/D>SQ_,_?ox_Mؕ?|}ME| {"h4bWxCQW5-@ E_G_gW?W?/&[+G%/D>SQ_,_?ox_Mؕ?|}ME| {"h4bWxCQW5-@ E_G_a{Gguv:_>p@(~>/$snDyK _topyK \../../misc/CsturtleDirections.htmyX;H,]ą'cP3DdN  S *A kochb2a-l4_f!2Xjn2a-l4_f!PNG  IHDRjj3bKGDtIMEd IDATxwxTU 4APETUWD@,te*bCcEqkYֵ*U~b]wRT@B9?$$dL2Ιy=O;~$S=I3$4~Z!cIKD<D2O&"0X G2%ѯ-g3?xbI_GoZjzF'XK$%`b'FoZiɏ#in> ~`V鍊parH GvTt[(D2RJu6mGtv^>"3=zsporHk;cW0)D\.8}O$npgWDqX^Hkc}H$͵{ƹD=D5??zgS #i/nԏާ/D spi$^VTmpu*a_`0Ʊ5L tսER@MIGq>pap &2Ba')q?bQ?Jf73kcV#0<>&5ø$S2n/dGuaRRᥰaRy>j;'HX^v{j1^ذaߏUCu 1KZ>{&X.^4 a}~††$\$!mp_;R bZΑu Æ=:F†=†u xpf>C=Ciܺ j^%)>)R.8v4w0^-1 Kx$3gxɌ-{0d+{mHf)Qs$l8-l|o웰ᕰ4KOu4wPA<8v4yG0 3,U c0qˮŒ,0p`@Ts TL  xNJၰIXBHp'0nA;zV-mH./Jj/;UY-l6,dH6, *kZP1'O+v4Wyewq˷y&m-?lE0| V:.fuʵJ31;  YcEP\ N9’DTW2lX6t+†NaenN^Ih-pfDznQrݳÆs [cE)7k*%svJ!$Rd'ە,P=lLI$l;0-n]ܒ1pinZ^' sl%0'/“ #e`)=Y:L/&2,fO H [I\vj;mkD- (98rTSq9rt5fиN}HBKlHQ';*h9G*D6(xr󤔦I\f;D ](իEJiX;4_8_KȥKx*ZpWlv$U^IJ(m:"_gO,s*TTL.n'?o %8@v45 עw+.)V\RNɤ^.;ըjn+Ux 8v4¢.Jl9G:*ԨE0Rnn"E"=+KTa;HhzbYsSi]mIc]q涃}Ӏl0g/aM/IG)zlw'&V!2aWdy[g ?eLVfd1_G`#37]Yh8ZE ٴS+YFu)>nljTO5S9CdlHoɡ*YlC1DuGuCd9l:$:dըMy}(/{2Ccvjh;]^Rl;=1`;0Xb;G-,`9x.9&39k8A8ܟA&&B mIH`9fSg0v[2=vdܙ8&R4u4&{XcQ} sX)O"~t< v*@nƙoo)S`""j;ccˀ̛/" K1~)"&ܾ/D)""q Wc EEDje? "">?5z }q4aѱalt^+=bҢx\ cicaTAE/@#`8x LC`-ǃDRg$Mz0RI""B qtt -n0Cjw)0OH/~?/5tWRou;]'Jftǝb m>e]~$n,5T3+""IVWB[DD N)w)d1OzaO1%ey8n_E v(8 TZQD>=>;K݄}|r;NEɿ9e-yγq%솻@RWӛDA UйNS"O7+Y4ocG~u`yD8 K?3qtd<9DI>;`ЕmǽSqB 9 nLeܦC$܎@ğ X>qFfT{ = -ƹ'FK7SCyα7B˸^`$҃5yEO痒ӈR_xYW$.{є=oD޵4x.#hN1󒰤"Ќ\'0J/*.iK"K-],Xe >skrjxSKt\3aXG7م[l/ͻ󝸡1>;µ)f <]AwHSxcx95 b.9x4q3UiXr+01. o_C){ Z˸ ~y0[xî-b0/ƸX{rbOtQ\]R'ƶ:540yt$Fȧ!m) `f-=؋f7 D_r$!7zT&.Ø[&/*/㴆!` *wmr`pBMMr-0ūnvz- [j1h܏Zj{@ #C45#f ָ' p@c'@chnȯBޕ*%{q>ÉlaIw=ʌ)RiN>g&qK 5 o':[fb$v}Ŵf[_~ Mnf/2hvY2JGKp5=^n˩B722W_rVfT}}\ 7~6.5H:ngM?gpO9_̎ͱǝ;^ aZnQy9"?)o\6hs_=5JgCЀ( i*^5t@Bc7g!q^ٌF~` !ޠkxњChNV:)\΃>,p^n)ͻ\>yДC/4fW9(\W::|C]_`7i/4d 2{SP^9y?svt#vuC+5/4%5o;J -RDz|@Qq(9vsg/ṑ#k· vG 0iNqR]J`>Ғ"yX'U4c&).Vd2t4ML*Q$p`Tdp9p2wَw.nT2gXcx3nFWN%l%d9\MGїY|p1҂ |׌(k06-Ch<[F2E`:{yYC*ZL=+g;Q_ ԑw# ҼtaQپ[%rz)0ltvcI;~؎Fs=ZÕnEkQ}88lGI 8&3> 4̎Y0M2N+~v_L,pۓm wKhK- cs6ak=6M`m(d؎2fs=mGI<[,tTK!#"6@!0r |^M[Q2!|JK(}mGtÝwCaM+!À7p o|:|`s`c rn5Ѭe&)z MO(A:$ϸf43glsy |\>| l#C0d0h,/qF +0Mt`'z?$bX)WRdc9X j;xvҮB!ǘ-$:Aʐ[xb0L$Fq6~J QEȰ4pFr#eÜJ6W"ư F/ZS1m4SC>֎ICC*ĮћmmGZ0=jZIZVpWpEdẠ8v}8GўnVdʅO Ή&"704f{}1dQ6v8ω`>ciNT*`%n}5ϯ)4ud1..[VVg,q+su8ŶsU+^פ'J7cXcK;OiT>FjV0p6ΒpYG8R$YRqi []pxS t/A@$$%N*: ;(|QH 'd6WoJ K9f΋R3Ӌ́)m;H LN,5ǀ/ q$!Z1'\xv$I3@iC+i;JqMwrFcER#OyЃ8IDATsS kgpF3mH{Gcxv1 R[9fsu9Y*єg~wH#"~X74`;lw&B3;bfV֝ccJWL 93bf=afo®'ɣَb]c.BԒsk:8:io8q8؎2B` 3r5lgIӔBh9` M/`OWR[Є%[@{$pfKLn%rӓɜ]6 |ȵa]\5$ܚ)kmG-No~%_+!''Q&d 0r  +xS},'6F003mGIUC{v0-Y3T(9& '7R1$6tE P< bzuŻ*cbjZ3Cy.U¬w]iJqb%/f(L%E{^u90ܖiJ  DNW8fO-Y(S.Ճk*8/Z=eS.$5Pfٝ"U)LqÊ NjШafm&LjdFbL\I/0Cˀ nF)1`a|2'ّzcѶd1Lf#EKt[ u!aReap1j2sB''faہ!#(`BbyÜQu< Ks g)Xl)JEc0_&9/y=&tah2PvLc2h l$3+5ќ)k7VGGВ" Xdő뀺!6ur%AA])rE1;< Pee;JF;C(&19Cl"z2aqKn)f.f<ӘWdvhůTAs:fw~#xZ&9iG!vu;-iCQp َ4s$p(fmiJ1h:ds8lt3f2zNg5ǰvw"яlsӋ,!h;K[B&p(>h[oz|Fjl0ԧz[RvP L100Yd<.=L.(s >)5`,^]oI< RdsaC$჆| oGOt48x)Gێmr)flg\s ؎u 9q(g0+|`;Gr37l(f/]زfX^C<a4kTܚL@Q_ݷϰ,c+qes6.k_r \;jfӗߨS~eE/WTw4_1tgfD?LS(uq{)3ǿ xLb )q2cqLd=wђhVa x\NguFƲjvθɌ'jCs,QX/6/NU"-G2qx̉ȍFR`6Gn䪚 >Un׸E#u@e_=uS3(7|Ex0G$a U9<Mh-XEyD@O~";,HʒҼ y&-{QjZe q_k!w|H!-MhL?Zr>k%ĝYU'I >o/"oI,S vxH p5n7(vl#KN# d .> \3yBտُ埻"0 Tnh~lfTlb͝7 a:R$tS.p}WDK|1݆頁L ,HbkiIk3_{߳<b;`b68 gt Pi/]ơ*e5Ӆt9n[ 8f+A05Ƹq1_W};6`O:e$ֹ4P\>>4#Y H`n~qQ*aXqC.)d &n3x|;c0aXO|{N>^`1-k8)z2_ g':N§pO܊Xƃq"c&bcGFX>aZM Kܼ D] ,>l.zO0q[.⾛fU#хfqTcU"x>#hA1gyl%;=D9Ӏ3ɴ0!\D wh Yqi˿tvyWw&{ݹ0O?EOp>ՠ)< @sѵ?܋ZSy}Ypp>lQ+_+S{8Wyop8+94*xӐf{(0y|OKqHLvrvLlgcV/It2019p+=-i·ޯ.j,hm8iɿ8U X$q?^ Ex3hՠ9/oxL s*,nIf;\|tf;yܱg2uY%$.2cC8Q uCs _Im# ҝ-LqT3cH9% MtАenn~5c#}'Ӊ_+7Y*"iT7r ]B zTCex7PRՅSf ~D~eTIC. d)h  "IYyKQ O#ykD;c C5Ghe;%]R\sӞ"L0H!ܐњ2+0]*$%)n0q&*$TK$ .C8MC#Bϫ)qYҬfq$0I?9Lftҏ-2Wjptށr|B-|Yd[kdR>:fˆ +)洡(8I&op \mʻ"Dg2B{?".8vC+d:6$-b"+lϏ_BO_TIA$ (QEtq>=hFqhn7H:+iLP,%E Wɸǝ$"% #X$i. ]e.p6nXU"hF$tΎ 9\DG$-MV6b454ŰC7Ʋ]83pggI\*,lf=Gy,iOrܩ- O j*LWF23C4KN]uc {ُ6(J+p:;=tg[`2G2D'ZNQGW01MN>aJN,if3;0ˇfq9v ;ˆdC)a~IENDB`f3 00hH0002 0@P`p2( 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p8XV~OJQJ_HmH nH sH tH J`J 6Normal dCJ_H aJmH sH tH ZZ 6 Heading 1@&m$5CJOJPJQJ\^JaJXX 6 Heading 2 @&5CJOJPJQJ\^JaJVV 6 Heading 3d@&5OJPJQJ\^JVV 6 Heading 4 @&56OJPJQJ\]^JZZ 6 Heading 5 @&5B*OJPJQJ\^Jphbb 6 Heading 6d@&%56B*OJPJQJ\]^JphLL 6 Heading 7 @&6OJPJQJ]^JNN 6 Heading 8 @&CJOJPJQJ^JaJX X 6 Heading 9 @&"6@CJOJPJQJ]^JaJDA`D Default Paragraph FontRiR  Table Normal4 l4a (k (No List <U@< veK0 Hyperlink7>*S*Y(ph"UTg@T veK0HTML TypewriterCJOJPJQJ^JaJphfff\^\ veK0 Normal (Web)$dd1$[$\$a$CJKHPJtH *W`!* 6`Strong5\PX`1P 6@Emphasis(56@ \]q reB (HTML Preformatted@$ 2( Px 4 #\'*.25@91$a$)B*CJKHOJPJQJ^JaJphffftH RQR 6Heading 1 Char5CJOJPJQJ\^JaJRaR 6Heading 2 Char5CJOJPJQJ\^JaJJqJ 6Heading 3 Char5OJPJQJ\^JPP 6Heading 4 Char56OJPJQJ\]^JTT 6Heading 5 Char5B*OJPJQJ\^JphZZ 6Heading 6 Char%56B*OJPJQJ\]^JphJJ 6Heading 7 Char6OJPJQJ]^JLL 6Heading 8 CharCJOJPJQJ^JaJVV  6Heading 9 Char"6@CJOJPJQJ]^JaJ\>\ 6Titled&dPm$@CJ4OJPJQJ^JaJ4HH 6 Title Char@CJ4OJPJQJ^JaJ4RJR !6Subtitle X"6@ CJOJPJQJ]^JaJTT 6 Subtitle Char"6@ CJOJPJQJ]^JaJ:@": 6 No Spacing "dD2D 6 List Paragraph #^m$DD %6Quote$hh]h^h6]2Q2 $6 Quote Char6]rr '6 Intense Quote1&$&dP]^a$ 56\]HqH &6Intense Quote Char 56\]<!< 60Subtle Emphasis6]>!> 6PIntense Emphasis5\<!< 6Subtle Reference:D!D 6Intense Reference :>*@:!: 6 Book Title 6:@]6 6 6p TOC Heading-@& Hb@H +0 HTML CodeCJOJPJQJ^JaJphfff4@4 0)0Header / H$:: /)0 Header Char CJ_H aJ4 @4 2)Footer 1 H$:!: 1) Footer Char CJ_H aJPK![Content_Types].xmlj0Eжr(΢Iw},-j4 wP-t#bΙ{UTU^hd}㨫)*1P' ^W0)T9<l#$yi};~@(Hu* Dנz/0ǰ $ X3aZ,D0j~3߶b~i>3\`?/[G\!-Rk.sԻ..a濭?PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!Ptheme/theme/theme1.xmlYOo6w toc'vuر-MniP@I}úama[إ4:lЯGRX^6؊>$ !)O^rC$y@/yH*񄴽)޵߻UDb`}"qۋJחX^)I`nEp)liV[]1M<OP6r=zgbIguSebORD۫qu gZo~ٺlAplxpT0+[}`jzAV2Fi@qv֬5\|ʜ̭NleXdsjcs7f W+Ն7`g ȘJj|h(KD- dXiJ؇(x$( :;˹! I_TS 1?E??ZBΪmU/?~xY'y5g&΋/ɋ>GMGeD3Vq%'#q$8K)fw9:ĵ x}rxwr:\TZaG*y8IjbRc|XŻǿI u3KGnD1NIBs RuK>V.EL+M2#'fi ~V vl{u8zH *:(W☕ ~JTe\O*tHGHY}KNP*ݾ˦TѼ9/#A7qZ$*c?qUnwN%Oi4 =3ڗP 1Pm \\9Mؓ2aD];Yt\[x]}Wr|]g- eW )6-rCSj id DЇAΜIqbJ#x꺃 6k#ASh&ʌt(Q%p%m&]caSl=X\P1Mh9MVdDAaVB[݈fJíP|8 քAV^f Hn- "d>znNJ ة>b&2vKyϼD:,AGm\nziÙ.uχYC6OMf3or$5NHT[XF64T,ќM0E)`#5XY`פ;%1U٥m;R>QD DcpU'&LE/pm%]8firS4d 7y\`JnίI R3U~7+׸#m qBiDi*L69mY&iHE=(K&N!V.KeLDĕ{D vEꦚdeNƟe(MN9ߜR6&3(a/DUz<{ˊYȳV)9Z[4^n5!J?Q3eBoCM m<.vpIYfZY_p[=al-Y}Nc͙ŋ4vfavl'SA8|*u{-ߟ0%M07%<ҍPK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-![Content_Types].xmlPK-!֧6 +_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!Ptheme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK] s  468:<?m % t W"Y "+$8'+.o2 57;>4?\@@QB'EGKlNSUY'` aacgj]mUpt>v!xmu>@ABCEFHIJLMNOQRTUWXZ[\]^`acdfgijklnopqstuvza "g'w/F6 >BJaRVam6u?DGKPSVY_behmrymPV X 5dv%%&3;4=467/777A8E8]88}WWWWWXZZZ![N[S[`aaUaaa9dyddgTgmg"ibiislllmCmSmsXXXCXXCXXXXXXXCCXXXCX!-0?!8@0(  B S  ?$ProblemsWelcomeWelcome_Lab_2_Numeric_IntegrationOverviewStep_1_Calculating_the_x_values Step_1_Calculating_the_x_values_Step_2_Calculating_the_y_valuesVisualizing_your_functionsSteps_3_4_Calculate_the_area_of Steps_3_4_Calculate_the_area_of_ Questions_to_answer_in_your_hw2pOPTIONAL_Bonus_problemsMore_accurate_integrationGold_Problem_3_The_sleepwalking Gold_Problem_3_The_sleepwalking_ Part_1_First_function_just_to_coPart_2_Second_function_to_write Part_2_Second_function_to_write_ Part_3_Third_function_to_write_rPart_4_Analysis_of_random_walksGold_Problem_4_Python_Bonsai 30_points_individual_filename_hw _30_points_individual_filename_hPart_1Part_2Not_enough_Extra_credit_options Not_enough_Extra_credit_options_Working_individually_vs_working Working_individually_vs_working_Overall_InstructionsDocstrings_and_Comments SubmissionLab_workPair_and_Individual_ProblemsA_Note_on_using_Recursion{{|# & &H.66999%?%?&DLXXX]_ddYmYmYmnyqyqyqyqs  !"#{{|# & &H.66999%?%?&DLXXX]_ddYmYmYmnyqyqyqyqsORy/8 )en%ev;DEM.6DM " !!!J"M"S"Y"""""##''((()) )))));+A+x+~+++++,,----------..00/252W2]22222334444445 555s5u5*606S6\67B8::::::::;';W;Y;/<1<^<`<P>\>>>H?M?f?k?t?z???W@\@@@@@AA>BCBBB]CbCFDMDUD\DNFUFGG/H6HIIIIJJJJKKKKsLzL~LLLLNNOOOOPPPPTU^UaZiZZZ [[]]]]G^T^H`N`P`[```\>{>>%?,?f?l?{A|A>BDBMBRBYB^BeBjBqBvB}BBBBBBBBBBBBBBD#D&D-DEEFG/H7HIIJJKKKKYL_LLLLLLLPPPPTTTT [[\\]]]]]]__H`O```aaaaffhhjkkk.n9nostswswsysyszszs|s}sssssss333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333237M7O7777C8D8D88WLXXmvswswsysyszszs|s}ssssssssssssss237M7O7777C8D8D88WLXXmvswswsysyszszs|s}ssssssssssssss>*fK6.Z ;** l6z822-Rظ[L\^6;_7Sbhg4l#`\p s n.+6'>ɒ;W(~:[+6+,E=4.><5T.􉂴y_/(@'3Fj5JdC.H6j")@ 8s. 8 rK9%Jn$=t'Dp>6DE>\<@F=$\g,AfO\,  &Oj@R2~Pn@x PJLSwl]aVX^Y튯dIZ ,9t]dt5i^h38_F\*`,.2N+bqHab|\-dOmhK(kq_zo n"Np1cdOp|yTq FtF"4'u<.Eu2Rw4\iyf<Ui}Gh5$[^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(h ^`hH.h ^`hH.h pL^p`LhH.h @ ^@ `hH.h ^`hH.h L^`LhH.h ^`hH.h ^`hH.h PL^P`LhH.^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(h ^`hH.h ^`hH.h pL^p`LhH.h @ ^@ `hH.h ^`hH.h L^`LhH.h ^`hH.h ^`hH.h PL^P`LhH.^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(h^`OJQJo(hHh^`OJQJ^Jo(hHohp^p`OJQJo(hHh@ ^@ `OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohP^P`OJQJo(hH^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(h ^`hH.h ^`hH.h pL^p`LhH.h @ ^@ `hH.h ^`hH.h L^`LhH.h ^`hH.h ^`hH.h PL^P`LhH.^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(h^`OJQJo(hHh^`OJQJ^Jo(hHohp^p`OJQJo(hHh@ ^@ `OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohP^P`OJQJo(hH^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(h^`OJQJo(hHh^`OJQJ^Jo(hHohp^p`OJQJo(hHh@ ^@ `OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohP^P`OJQJo(hH^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(>5$ &On$=N+bAHEu+6'k s .H6dIZ* p>Ui}Ftmh5yTq+,S PE>6)@ 85T.iy<@#;_*`b22- 8\-d[L\fKg,A;W( >                                                      ilmL=KZ0xxxx~m 0xxxx  P"!#H]0xxxx[8E P"0xxxx!(xNmL(Z<D"D"D"D"=KZ[g^q0xxxxH]Zgjpg^qtil0xxxx5B|Zgjp0xxxxLK6d 1<SjD) / h#9j$'I'q=+j0N#3;4B)6EL9\<<eCveKFfLOOgT_Ea3,cLg%oco?tQwR#xk yvyE?k7B.8XdzQLeGq#x9($~Pcji-k1?+1\n_vy&`x`zL8Q,#R^jwsys@vsvsqvsvs4EF@rsX@XNX@X@Unknown G*Ax Times New Roman5Symbol3. *Cx Arial7. [ @Verdana?= *Cx Courier New7.{ @Calibri7K@Cambria;WingdingsA BCambria Math 1hjƦP;FL;FE;                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = Oh+'0   @ L X dpxResearch IdeasChristine ChenNormalFujitsu69Microsoft Office Word@a@EX@DDq@R笷;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{}~      !"#$%&'()*+,-./0123456789;<=>?@ACDEFGHINRoot Entry F@OPData |)1TableWordDocument;SummaryInformation(:DocumentSummaryInformation8BCompObjy  F'Microsoft Office Word 97-2003 Document MSWordDocWord.Document.89q