This action might not be possible to undo. Are you sure you want to continue?

sg/~cs1010/

Week 9: Recursion

Objectives: Understand the nature of recursion Learn to write recursive functions Comparing recursive codes with iterative codes Reference: Chapter 8, Lesson 8.10

CS1010 (AY2011/2 Semester 1)

Week9 - 2

Week 9: Outline (1/2)

0. Week 8 Exercise #2: Valid Path

1. Introduction 2. Two Simple Classic Examples

2.1 Demo #1: Factorial 2.2 Demo #2: Fibonacci

3. Gist of Recursion

4. Exercises #1 – 3

5. Thinking Recursively

5.1 Think: Sum of Squares 5.2 Demo #3: Counting Occurrences

CS1010 (AY2011/2 Semester 1)

Week9 - 3

Auxiliary Function 8.4 . Towers of Hanoi CS1010 (AY2011/2 Semester 1) Week9 . Exercise #4 (take-home): Sum Array 7. Tracing Recursive Codes 10.Week 9: Outline (2/2) 6. Types of Recursion 9. Recursion versus Iteration 11.

Sierpinksi triangle Droste effect Recursive tree CS1010 (AY2011/2 Semester 1) Week9 .1. Introduction (1/3) Some examples of recursion (inside and outside CS): Garfield dreaming recursively.5 .

6 . GNU = GNU’s Not Unix 2. Introduction (2/3) Definitions based on recursion: Recursive definitions: 1.1. the former is the latter’s child. PHP = PHP: Hypertext Preprocessor CS1010 (AY2011/2 Semester 1) Week9 . Recursive acronyms: 1. Dictionary entry: Recursion: See recursion. A list of numbers is a number. or the former is one of the descendants of the latter’s child. or a number followed by a list of numbers. A person is a descendant of another if 2.

7 . Introduction (3/3) There is NO new syntax needed for recursion.1. Recursion is a form of (algorithm) design. it is a problemsolving technique for divide-and-conquer paradigm Very important paradigm – many CS problems solved using it Recursion is: CS1010 (AY2011/2 Semester 1) Week9 .

Two Simple Classic Examples From these two examples. you will see how a recursive algorithm works Winding phase Invoking/calling „itself‟ to solve smaller or simpler instance(s) of a problem … … and then building up the answer(s) of the simpler instance(s).2.8 . Unwinding phase CS1010 (AY2011/2 Semester 1) Week9 .

n--. i<=n. i.c return ans. i++) { int factorial_iter2(int n) ans *= i.9 . } CS1010 (AY2011/2 Semester 1) Week9 . // Pre-cond: n >= 0 for (i=2.1 Demo #1: Factorial (1/3) n! = n (n – 1) (n – 2) … 2 1 Iterative code (version 1): // Pre-cond: n >= 0 int factorial_iter1(int n) Iterative code (version 2): { int ans = 1. { } int ans = 1. return ans. while (n > 1) { } ans *= n.2. } Week9_factorial.

else return n * factorial(n-1).1 Demo #1: Factorial (2/3) n! = n (n – 1) (n – 2) … 2 1 Doing it the recursive way? // Pre-cond: n >= 0 int factorial(int n) { if (n == 0) return 1. .2. } Note: All the three versions work only for n < 13.10 Recurrent relation: n! = n (n – 1)! 0! = 1 No loop! But calling itself (recursively) brings out repetition. due to the range of values permissible for type int. CS1010 (AY2011/2 Semester 1) Week9 . not a limitation of the problem-solving model. This is the limitation of the data type.

call 1 * f(0) f(0): Since 0 == 0. } f(1): Since 1 ≠ 0. we write f(3).2. call 3 * f(2) f(2): Since 2 ≠ 0.1 Demo #1: Factorial (3/3) Trace factorial(3). Trace tree: f(3) 6 f(3): Since 3 ≠ 0. For simplicity. else return n * f(n-1). call 2 * f(1) Winding: int f(int n) { if (n == 0) return 1.11 . … 3 * f(2) 2 1 1 Unwinding: f(0): Return 1 f(1): Return 1 * f(0) = 1 * 1 = 1 f(2): Return 2 * f(1) = 2 * 1 = 2 f(3): Return 3 * f(2) = 3 * 2 = 6 2 * f(1) 1 * f(0) CS1010 (AY2011/2 Semester 1) Week9 .

… Fibonacci numbers are found in nature (sea-shells.2 Demo #2: Fibonacci (1/?) The Fibonacci series models the rabbit population each time they mate: 1. 8. 2. 5. 21. 8.2. 3.surrey. 13.Knott/Fibonacci/fibnat.html CS1010 (AY2011/2 Semester 1) Week9 . 5. … The modern version is: 0. etc) http://www. 13. 1.ac. sunflowers.uk/hosted-sites/R. 21. 1. 2.12 .maths. 3. 1.

sum. … Iterative code: // Pre-cond: n >= 0 int fib_iter(int n) { int prev1 = 1.c Recursive code: // Pre-cond: n >= 0 int fib(int n) { if (n < 2) return n. 1. prev2 = prev1. n>1. 1. 8. prev2 = 0. } Recurrent relation: fn = fn-1 + fn-2 n≥ 2 f0 = 0 f1 = 1 .13 Week9_fibonacci. for (. n--) { sum = prev1 + prev2. 5. prev1 = sum. } CS1010 (AY2011/2 Semester 1) Week9 . 21.2. } return sum. 2. 3.2 Demo #2: Fibonacci (2/8) 0. 13. if (n < 2) return n. else return fib(n-1) + fib(n-2).

else return fib(n-1) + fib(n-2).14 CS1010 (AY2011/2 Semester 1) . } fib(n) makes 2 recursive calls: fib(n-1) and fib(n-2) Trace tree (or call tree) for fib(5) 5 fib(5) Winding Unwinding 3 fib(4) 2 fib(3) 2 fib(3) 1 fib(2) 1 fib(2) 1 fib(1) 1 fib(2) 1 fib(1) 1 fib(1) 0 fib(0) 1 fib(1) 0 fib(0) 1 fib(1) 0 fib(0) Week9 .2.2 Fibonacci (3/8) int fib(int n) { if (n < 2) return n.

do f(0) for me.15 . f(3) f(1) f(0) CS1010 (AY2011/2 Semester 1) Week9 . do f(2) for me. and return 1 to my boss. do f(1) for me. I‟ll return 3 * your answer to my boss. I‟ll return 2 * your answer to my boss. Recursion man Iteration man I do f(3) all by myself…return 6 to my boss. I‟ll return 1 * your answer to my boss.3. Gist of Recursion (1/6) Iteration vs Recursion: How to compute factorial(3)? You. f(3) You. You. f(2) I will do f(0) all by myself.

16 . non-recursive solution The other cases can be redefined in terms of problems that are smaller.3.e. Gist of Recursion (2/6) Problems that lend themselves to a recursive solution have the following characteristics: One or more simple cases (also called base cases or anchor cases) of the problem have a straightforward. closer to the simple cases By applying this redefinition process every time the recursive function is called. eventually the problem is reduced entirely to simple cases. which are relatively easy to solve The solutions of the smaller problems are combined to obtain the solution of the original problem CS1010 (AY2011/2 Semester 1) Week9 . i.

} // Pre-cond: n >= 0 int factorial(int n) { if (n == 0) return 1. Gist of Recursion (3/6) To write a recursive function: Identify the base case(s) of the relation Identify the recurrent relation // Pre-cond: n >= 0 int fib(int n) { if (n < 2) return n.3. } CS1010 (AY2011/2 Semester 1) Week9 . else return fib(n-1) + fib(n-2).17 . else return n * factorial(n-1).

else if (n == 2) redundant return 2. else return n * factorial(n-1). else if (n == 3) return 6.3. else if (n == 1) return 1. } Do not write redundant base cases CS1010 (AY2011/2 Semester 1) Week9 .18 . Gist of Recursion (4/6) Always check for base case(s) first What if you omit base case(s)? int factorial(int n) { if (n == 0) return 1.

Stack is also known as LIFO (last-in-first-out) structure A recursive function can potentially create many activation records Winding: each recursive call creates a separate record Unwinding: each return to the caller erases its associated record CS1010 (AY2011/2 Semester 1) Week9 . Gist of Recursion (5/6) When a function is called. Such records reside in the memory called stack.19 . an activation record (or frame) is created by the system.3. Each activation record stores the local parameters and variables of the function and its return address.

else return n * f(n-1).20 . Gist of Recursion (6/6) int f(int n) { if (n == 0) return 1. } Example: factorial(3) n n 2 n n 1 2 n n n n 0 1 1 2 n n n 1 1 2 n 3 n 3 3 3 3 f(3) f(2) f(1) f(0) n 3 6 n n 2 2 3 CS1010 (AY2011/2 Semester 1) Week9 .3.

mystery1(n/10).21 . Given the following 2 recursive functions. trace mystery1(3902) and mystery2(3902) using the trace tree method void mystery1(int n) { if (n>0) { printf("%d". n%10). printf("%d". } } void mystery2(int n) { if (n>0) { mystery2(n/10). } } The order of statements does matter! CS1010 (AY2011/2 Semester 1) Week9 . n%10). Exercises #1 – 3 (1/2) 1.4.

4. Exercises #1 – 3 (2/2)

2. The recurrence relation for Greatest Common Divisor (GCD) of two non-negative integers a and b, not both zero, is given below:

Write a function int gcd(int a, int b) to compute the GCD of a and b. Skeleton program Week9_gcd.c given.

3. The math function double pow(double x, double y) computes xy. Write your own, simpler function double mypow(double x, int n) to compute xn, where n is a nonnegative integer. Skeleton program Week9_pow.c given.

The recurrence relation is not given, can you derive it before writing the function?

CS1010 (AY2011/2 Semester 1) Week9 - 22

5. Thinking Recursively

**It is apparent that to do recursion you need to think “recursively”:
**

Breaking a problem into simpler problems that have identical form

Is there only one way of breaking a problem into simpler problems?

CS1010 (AY2011/2 Semester 1)

Week9 - 23

**5.1 Think: Sum of Squares (1/5)
**

**Given 2 positive integers x and y, where x y, compute
**

sumSq(x,y) = x2 + (x+1) 2 + … + (y-1) 2 + y2

For example

sumSq(5,10) = 52 + 62 + 72 + 82 + 92 + 102 = 355

How do you break this problem into smaller problems? How many ways can it be done? We are going to show 3 versions

Week9 - 24

CS1010 (AY2011/2 Semester 1)

25 .1 Think: Sum of Squares (2/5) Version 1: Version 2: CS1010 (AY2011/2 Semester 1) Week9 .5.

26 .1 Think: Sum of Squares (3/5) Version 3: CS1010 (AY2011/2 Semester 1) Week9 .5.

5.1 Think: Sum of Squares (4/5) Trace trees CS1010 (AY2011/2 Semester 1) Week9 .27 .

1 Think: Sum of Squares (5/5) Trace trees CS1010 (AY2011/2 Semester 1) Week9 .5.28 .

-2.2 Demo #3: Counting Occurrences (1/4) Given an array int list[] = { 9. 8. 7. 1. 15) to return 3 (the number of times 7 appears in the 15 elements of list. list. CS1010 (AY2011/2 Semester 1) Week9 .29 . 9. 2. 1. -5. 3. -2. -3 } We want countValue(7. 0.5. 7. 7.

return count. i. for (i=0. int size) { int count = 0.2 Demo #3: Counting Occurrences (2/4) Iterative code: Week9_countValue.5.c int countValue_iter(int value. i<size. int arr[].30 . i++) if (value == arr[i]) count++. } CS1010 (AY2011/2 Semester 1) Week9 .

Recursive thinking goes… 9 -2 1 7 3 9 -5 7 2 1 7 -2 0 8 -3 … and get someone to count the 7 in this smaller problem. my answer is either his answer or his answer plus 1! CS1010 (AY2011/2 Semester 1) Week9 . 15) to return 3. … … then. depending on whether the last element is 7 or not.2 Demo #3: Counting Occurrences (3/4) To get countValue(7. … If I handle the last element myself.31 .5. list.

else return countValue(value. size-1). } Note: The second return statement is equivalent to the following (why?): if (value == arr[size-1]) return 1 + countValue(value.32 . int arr[]. size-1).5. arr. arr. CS1010 (AY2011/2 Semester 1) Week9 .c int countValue(int value. arr. int size) { if (size == 0) return 0.2 Demo #3: Counting Occurrences (4/4) Recursive code: Week9_countValue. size-1). else return (value == arr[size-1]) + countValue(value.

c to include a recursive function to sum up all values in an integer array. We will discuss it next week. Exercise #4 (take-home): Sum Array Write a program Week9_sumArray.33 .6. CS1010 (AY2011/2 Semester 1) Week9 .

34 . int start. int size) { if (start == size) return 0. start+1. arr. Eg: Refer to Demo #3 Counting Occurrences. } CS1010 (AY2011/2 Semester 1) Week9 . else return (value == arr[start]) + countValue(val. . Auxiliary Function (1/3) Sometimes. If the function handles the first element instead of the last. auxiliary functions are needed to implement recursion.7. int arr[]. it would be re-written as follows: int countValue(int value. size).

Auxiliary Function (2/3) However. CS1010 (AY2011/2 Semester 1) Week9 . ARRAY_SIZE) to: countValue(value. doing so means that the calling function has to change the call from: countValue(value.35 .7. ARRAY_SIZE) The additional parameter 0 seems like a redundant data from caller‟s point of view. 0. list. list.

c CS1010 (AY2011/2 Semester 1) Week9 . int size) { return countValue_recur(val. } See program Week9_countValue_auxiliary. size). 0. list. Auxiliary Function (3/3) Solution: Keep the calling part as: countValue(value. ARRAY_SIZE) Rename the original countValue() function to countValue_recur(). arr. as follows: int countValue(int value. Add a new function countValue() to act as a driver function. int arr[]. The recursive call inside should also be similarly renamed.36 .7.

or function X calls function Y. Types of Recursion (1/3) Besides direct recursion (function A calls itself). which calls function A. which calls function Z. One type of recursion is known as tail recursion.8. Note that it is not typical to write a recursive main() function. CS1010 (AY2011/2 Semester 1) Week9 .37 . there could be mutual or indirect recursion (we will not cover these in CS1010) Examples: Function A calls function B. which calls function X.

b) CS1010 (AY2011/2 Semester 1) Week9 .8. Types of Recursion (2/3) Tail recursion is one in which the recursive call is the last operation in the code. y) fibonacci(n) gcd(a. Which of the following are tail recursion and which are not? factorial(n) mypow(x. n) sumSq(x.38 .

Types of Recursion (3/3) Rewriting _______ into a tail-recursive function. Original (non-tailrecursive): Tail-recursive: CS1010 (AY2011/2 Semester 1) Week9 .8.39 .

start tracing with small problem sizes. However. Students should grow out of tracing habit and understand recursion by examining the relationship between the problem and its immediate subproblem(s). then gradually see the relationship between the successive calls.9. tracing a recursive code is tedious. Tracing Recursive Codes Beginners usually rely on tracing to understand the sequence of recursive calls and the passing back of results.40 . especially for non-tailrecursive codes. The trace tree could be huge (example: fibonacci.) If you find that tracing is needed to aid your understanding. CS1010 (AY2011/2 Semester 1) Week9 .

CS1010 (AY2011/2 Semester 1) Week9 . then do it with iteration. For example. If a problem can be done easily with iteration. Fibonacci can be coded with iteration or recursion. so use iteration instead.41 . but the recursive version is very inefficient (large call tree due to duplicate computations).10. Recursion versus Iteration (1/2) Iteration can be more efficient Replaces function calls with looping Less memory is used (no activation record for each call) Some good compilers are able to transform a tailrecursion code into an iterative code.

In general. use recursion if A recursive solution is natural and easy to understand. A recursive solution does not result in excessive duplicate computation.10. Recursion versus Iteration (2/2) Many problems are more naturally solved with recursion. Towers of Hanoi Mergesort (to be covered in CS1020) The N Queens problem Conclusion: choice depends on problem and the solution context.42 . CS1010 (AY2011/2 Semester 1) Week9 . which can provide elegant solution. The equivalent iterative solution is too complex.

with the smallest disk on the top and the biggest at the bottom. with the following simple rules: Only one disk (the one at the top) can be moved at a time. There are 3 pegs (A. in1883. A bigger disk must not rest on a smaller disk.43 CS1010 (AY2011/2 Semester 1) .11. The purpose of the puzzle is to move the whole tower from peg A to peg C. B and C) and a tower of n disks on the first peg A. Invented by Edouard Lucas. Towers of Hanoi (1/17) This classical “Towers of Hanoi” puzzle has attracted the attention of computer scientists more than any other puzzles. Week9 . a French mathematician.

11. Output produced by program: Move disk from A to C Move disk from A to B Move disk from C to B Move disk from A to C Move disk from B to A Move disk from B to C Move disk from A to C CS1010 (AY2011/2 Semester 1) Week9 . Towers of Hanoi (2/17) Demo: Tower of Hanoi We attempt to write a program to produce instructions on how to move the disks from peg A to peg C to complete the puzzle. Example: A tower with 3 disks.44 .

11.45 . Move disk from A to C Move disk from A to B Move disk from C to B Move disk from A to C Move disk from B to A Move disk from B to C Move disk from A to C A CS1010 (AY2011/2 Semester 1) B C Week 9 . Towers of Hanoi (3/17) Example: A tower with 3 disks.

46 .11. Move disk from A to C Move disk from A to B Move disk from C to B Move disk from A to C Move disk from B to A Move disk from B to C Move disk from A to C A CS1010 (AY2011/2 Semester 1) B C Week9 . Towers of Hanoi (4/17) Example: A tower with 3 disks.

47 . Move disk from A to C Move disk from A to B Move disk from C to B Move disk from A to C Move disk from B to A Move disk from B to C Move disk from A to C A CS1010 (AY2011/2 Semester 1) B C Week9 . Towers of Hanoi (5/17) Example: A tower with 3 disks.11.

Towers of Hanoi (6/17) Example: A tower with 3 disks.48 .11. Move disk from A to C Move disk from A to B Move disk from C to B Move disk from A to C Move disk from B to A Move disk from B to C Move disk from A to C A CS1010 (AY2011/2 Semester 1) B C Week9 .

49 .11. Towers of Hanoi (7/17) Example: A tower with 3 disks. Move disk from A to C Move disk from A to B Move disk from C to B Move disk from A to C Move disk from B to A Move disk from B to C Move disk from A to C A CS1010 (AY2011/2 Semester 1) B C Week9 .

Move disk from A to C Move disk from A to B Move disk from C to B Move disk from A to C Move disk from B to A Move disk from B to C Move disk from A to C A CS1010 (AY2011/2 Semester 1) B C Week9 .50 .11. Towers of Hanoi (8/17) Example: A tower with 3 disks.

Towers of Hanoi (9/17) Example: A tower with 3 disks. Move disk from A to C Move disk from A to B Move disk from C to B Move disk from A to C Move disk from B to A Move disk from B to C Move disk from A to C A CS1010 (AY2011/2 Semester 1) B C Week9 .11.51 .

Towers of Hanoi (10/17) Example: A tower with 3 disks. Move disk from A to C Move disk from A to B Move disk from C to B Move disk from A to C Move disk from B to A Move disk from B to C Move disk from A to C VIOLA! A CS1010 (AY2011/2 Semester 1) B C Week9 .52 .11.

move four disks from peg A to peg B 2. Towers of Hanoi (11/17) Can be interpreted as: 1. move four disks from peg B to peg C CS1010 (AY2011/2 Semester 1) Week9 .53 .11. move disk 5 from peg A to peg C 3.

Towers of Hanoi (12/17) Towers after steps 1 and 2: But how do we execute step 1? Or step 3? Step 3 can be interpreted as: 3.54 .2 move disk 4 from peg B to peg C 3.11.3 move three disks from peg A to peg C CS1010 (AY2011/2 Semester 1) Week9 .1 move three disks from peg B to peg A 3.

55 . 3. 2.11.1 and 3. Towers of Hanoi (13/17) Towers after steps 1.2: Can you start to visualise how to solve this using recursion? CS1010 (AY2011/2 Semester 1) Week9 .

Towers of Hanoi (14/17) Algorithm: if (n > 0) move n – 1 disks from the source peg to the temp peg using the dest peg move disk n from the source peg to the dest peg move n – 1 disks from the temp peg to the dest peg using the source peg CS1010 (AY2011/2 Semester 1) Week9 .56 .11.

source. Disks are numbered 1 to n // (smallest to largest).57 .c // Display instructions for moving n disk from source to dest // using temp as an auxiliary. source. &disks). char dest.h> void tower(char. int main(void) { int disks. tower('A'. void tower(char source. scanf("%d". printf("Move disk %d from peg %c to peg %c\n". disks). Towers of Hanoi (15/17) #include <stdio.11. tower(temp. } } CS1010 (AY2011/2 Semester 1) Week9 . dest. char.'C'. n-1). n-1).'B'. return 0. char temp. printf("Number of disks: "). dest). n. temp. int n) { if (n > 0) { tower(source. int). dest. } Week9_TowersOfHanoi. char.

'B'. 'B'.58 tower ('B'. 0) move 1 from C to B tower ('A'. 1) move 2 from A to B tower ('C'. 0) source is 'A' temp is 'B' dest is 'C' n is 3 tower ('A'. 'A'. 'A'. 'B'. 'C'. 0) move 1 from A to C tower ('B'. 'B'. 'C'. 'B'. 'A'. 'C'. source is 'A' temp is 'C' dest is 'B' n is 2 tower ('A'. 'B'. 'C'. 3). 0) source is 'B' temp is 'C' dest is 'A' n is 1 tower ('B'. 2) move 3 from A to C tower ('B'. 0) move 1 from B to A tower ('C'. 1) source is 'A' temp is 'B' dest is 'C' n is 1 tower ('A'. 'C'. 'C'. Towers of Hanoi (16/17) Trace of tower('A'. 'A'. 'C'. tower('A'. 'B'. 'C'. 'C'. 'B'. 'C'. 0) source is 'C' temp is 'A' dest is 'B' n is 1 tower ('C'. 1) CS1010 (AY2011/2 Semester 1) . 0) source is 'A' temp is 'B' dest is 'C' n is 1 tower ('A'. 'C'. 'A'. 'B'. 'A'.11. 0) move 1 from A to C Week9 . 'A'. 'B'. 'C'. 1) move 2 from B to C tower ('A'. 'B'. 3). 'C'. 'A'. 2) source is 'B' temp is 'A' dest is 'C' n is 2 tower ('B'.

'B'. Move Move Move Move Move Move Move disk disk disk disk disk disk disk 1 2 1 3 1 2 1 from from from from from from from peg peg peg peg peg peg peg A A C A B B A to to to to to to to peg peg peg peg peg peg peg C B B C A C C CS1010 (AY2011/2 Semester 1) Week9 .11.59 . 3). 'C'. Towers of Hanoi (17/17) Output generated by tower('A'.

Summary for Today In this lecture we looked at: Recursion as a design The components of a recursive code Difference between Recursion and Iteration CS1010 (AY2011/2 Semester 1) Week9 .60 .

6 – 7.Announcements/Things-to-do Revise: Lesson 8.4 .8 CS1010 (AY2011/2 Semester 1) Week9 . Saturday. Lessons 7. 12 noon.61 .1 – 7. Deadline for Lab #4 Next week‟s lecture: Chapter 7: Strings Lessons 7.10 Functions with One Recursive Call 15 October 2011.

End of File CS1010 (AY2011/2 Semester 1) Week9 .62 .

- ChewMA1506-14 Ch6
- pass exam CH 8 Q
- ChewMA1506-14 Ch3
- ChewMA1506-14 Ch1
- ChewMA1506-14 Ch7
- Past Year Exam Q CH3
- ChewMA1506-14 Ch5
- Summary of CH6
- ChewMA1506-14 Ch2
- Plug Folw Reactor
- Additional Slides for CH1
- Why sinhx
- Integrals Used in Chapter One
- Cantilevered Beam
- ChewMA1506-14 Ch4
- CH7 Slide 37 and Two New Slides
- ChewMA1506-14 Ch8
- Review Ch8
- Impulsive Force and Velocity
- Basic Laplace Transforms
- Shear Not Parallel to Axis
- MA1506CHAP1
- MA1506CHAP2
- MA1506CHAP8
- MA1506CHAP3

Sign up to vote on this title

UsefulNot usefulasf

asf

- C Notes
- lecture 3
- L07cs2110sp13-6up
- CS201midterm Subjectives Solved With References by Moaaz1
- Types of Programming Languages
- cemail
- compilerProjectReport_11_19
- programing in c
- ocaml book
- White Paper
- Unit - 2 Final ECE ES
- exam1
- Chap05
- class4
- Paradigm
- C language
- Numbers
- Introduction to C _ Part-1
- Why Would You Precede the Main
- Chapter 10 CS
- Fibonacci One
- C-Basics ppt
- CS201IntroductiontoProgrammmingSolvedSubjectiveQuestionsFromspring2010FinalTermPapers
- C Komut Sözlüğü.pdf
- c data structures
- Function Overloading
- bad
- VST-01 _Questions & Answers
- Touchwin C Language Manual
- Embedded-C Coding Standard
- Week9.pptx

Are you sure?

This action might not be possible to undo. Are you sure you want to continue?

We've moved you to where you read on your other device.

Get the full title to continue

Get the full title to continue reading from where you left off, or restart the preview.

scribd