Download
example factorial n.
Skip this Video
Loading SlideShow in 5 Seconds..
Example – factorial PowerPoint Presentation
Download Presentation
Example – factorial

Example – factorial

134 Vues Download Presentation
Télécharger la présentation

Example – factorial

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. #include <stdio.h> int factorial(int n) { int fact = 1; while (n >= 1) { fact *=n; n--; } return fact; } int main(void) { int num, fact; printf("enter a number\n"); scanf("%d",&num); fact = factorial(num); printf("%d! = %d\n", num, fact); return 0; } Example – factorial

  2. (n-1)! Another way of looking at factorial • As we saw, n! = 1*2*3*… *(n-1)*n • Thus, we can also define factorial the following way: • 0! = 1 • n! = n*(n-1)! for n>0 *n

  3. A recursive definition • C functions can also call themselves! • However, usually not with the same parameters (why?) • Some functions can be defined using smaller occurrences of themselves. • Such a definition is called a “recursive definition” of a function. • Every recursive function has a “boundary condition”. The function stops calling itself when it is satisfied. • Why is this necessary?

  4. int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); } int factorial(int n) { int fact =1; while (n >= 1) { fact *=n; n--; } return fact; } Example - factorial

  5. Recursive factorial – step by step FactRec(4) int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); } n 4 Returns…

  6. Recursive factorial – step by step FactRec(4) int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); } n 4 Returns… 4*…

  7. FactRec(4) FactRec(3) n n 4 3 Returns… Returns… Recursive factorial – step by step int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); }

  8. FactRec(4) FactRec(3) n n 4 3 Returns… Returns… Recursive factorial – step by step int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); }

  9. FactRec(4) FactRec(3) n n 4 3 Returns… Returns… 3*… Recursive factorial – step by step int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); }

  10. FactRec(4) FactRec(3) FactRec(2) n n n 4 3 2 Returns… Returns… Returns… Recursive factorial – step by step int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); }

  11. FactRec(4) FactRec(3) FactRec(2) n n n 4 3 2 Returns… Returns… Returns… Recursive factorial – step by step int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); }

  12. FactRec(4) FactRec(3) FactRec(2) n n n 4 3 2 Returns… Returns… Returns… 2*… Recursive factorial – step by step int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); }

  13. FactRec(4) FactRec(1) FactRec(3) FactRec(2) n n n n 2 1 3 4 Returns… Returns… Returns… Returns… Recursive factorial – step by step int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); }

  14. FactRec(4) FactRec(1) FactRec(3) FactRec(2) n n n n 2 1 3 4 Returns… Returns… Returns… Returns… Recursive factorial – step by step int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); }

  15. FactRec(4) FactRec(3) FactRec(2) FactRec(1) n n n n 2 3 4 1 Returns… Returns… Returns… Returns… 1 Recursive factorial – step by step int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); }

  16. FactRec(4) FactRec(3) FactRec(2) n n n 4 3 2 Returns… Returns… Returns… 2*1 Recursive factorial – step by step int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); }

  17. FactRec(4) FactRec(3) n n 4 3 Returns… Returns… 3*2 Recursive factorial – step by step int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); }

  18. FactRec(4) n 4 Returns… 4*6 Recursive factorial – step by step int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); }

  19. Another example - power • Xy = x*x*…*x • Recursive definitions (Assume non-negative y): • Base: x0=1 • Xy = x*(Xy-1) • Xy =(Xy/2)2 (for even y’s only) y times

  20. Example rec_pow.c

  21. rec_pow(2, 7) x y 2 7 Returns… rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  22. rec_pow(2, 7) x y 2 7 Returns… rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  23. rec_pow(2, 7) x y 2 7 Returns… rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  24. rec_pow(2, 7) x y 2 7 Returns… rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if(y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  25. rec_pow(2, 7) x y 2 7 Returns… 2*… rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if(y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  26. rec_pow(2, 7) rec_pow(2, 6) x x y y 2 2 7 6 Returns… Returns… rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if(y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  27. rec_pow(2, 7) rec_pow(2, 6) x x y y 2 2 7 6 Returns… Returns… rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if(y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  28. rec_pow(2, 7) rec_pow(2, 6) x x y y 2 2 7 6 Returns… Returns… rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  29. rec_pow(2, 7) rec_pow(2, 6) x x y y 2 2 7 6 Returns… Returns… square(…) rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if(y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  30. rec_pow(2, 7) rec_pow(2, 3) rec_pow(2, 6) x x x y y y 2 2 2 6 3 7 Returns… Returns… Returns… square(…) rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if(y%2 == 0) returnsquare(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  31. rec_pow(2, 7) rec_pow(2, 3) rec_pow(2, 6) x x x y y y 2 2 2 6 3 7 Returns… Returns… Returns… square(…) rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if(y%2 == 0) returnsquare(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  32. rec_pow(2, 7) rec_pow(2, 3) rec_pow(2, 6) x x x y y y 2 2 2 6 3 7 Returns… Returns… Returns… square(…) rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) returnsquare(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  33. rec_pow(2, 7) rec_pow(2, 3) rec_pow(2, 6) x x x y y y 2 2 2 6 3 7 Returns… Returns… Returns… square(…) rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if(y%2 == 0) returnsquare(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  34. rec_pow(2, 7) rec_pow(2, 3) rec_pow(2, 6) x x x y y y 2 2 2 6 3 7 Returns… Returns… Returns… 2*… square(…) rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if(y%2 == 0) returnsquare(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  35. rec_pow(2, 6) rec_pow(2, 7) rec_pow(2, 3) rec_pow(2, 2) x x x x y y y y 2 2 2 2 3 2 7 6 Returns… Returns… Returns… Returns… square(…) rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if(y%2 == 0) returnsquare(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  36. rec_pow(2, 6) rec_pow(2, 7) rec_pow(2, 3) rec_pow(2, 2) x x x x y y y y 2 2 2 2 3 2 7 6 Returns… Returns… Returns… Returns… square(…) rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if(y%2 == 0) returnsquare(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  37. rec_pow(2, 6) rec_pow(2, 7) rec_pow(2, 3) rec_pow(2, 2) x x x x y y y y 2 2 2 2 3 2 7 6 Returns… Returns… Returns… Returns… square(…) rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) returnsquare(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  38. rec_pow(2, 6) rec_pow(2, 7) rec_pow(2, 3) rec_pow(2, 2) x x x x y y y y 2 2 2 2 3 2 7 6 Returns… Returns… Returns… Returns… square(…) square(…) rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if(y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  39. rec_pow(2, 2) rec_pow(2, 7) rec_pow(2, 3) rec_pow(2, 6) rec_pow(2, 1) x x x x x y y y y y 2 2 2 2 2 2 1 6 7 3 Returns… Returns… Returns… Returns… Returns… square(…) rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if(y%2 == 0) returnsquare(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  40. rec_pow(2, 2) rec_pow(2, 7) rec_pow(2, 3) rec_pow(2, 6) rec_pow(2, 1) x x x x x y y y y y 2 2 2 2 2 2 1 6 7 3 Returns… Returns… Returns… Returns… Returns… square(…) rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if(y%2 == 0) returnsquare(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  41. rec_pow(2, 2) rec_pow(2, 7) rec_pow(2, 3) rec_pow(2, 6) rec_pow(2, 1) x x x x x y y y y y 2 2 2 2 2 2 1 6 7 3 Returns… Returns… Returns… Returns… Returns… square(…) rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if(y%2 == 0) returnsquare(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  42. rec_pow(2, 2) rec_pow(2, 7) rec_pow(2, 3) rec_pow(2, 6) rec_pow(2, 1) x x x x x y y y y y 2 2 2 2 2 2 1 6 7 3 Returns… Returns… Returns… Returns… Returns… square(…) rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) returnsquare(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  43. rec_pow(2, 2) rec_pow(2, 7) rec_pow(2, 3) rec_pow(2, 6) rec_pow(2, 1) x x x x x y y y y y 2 2 2 2 2 2 1 6 7 3 Returns… Returns… Returns… Returns… Returns… square(…) rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if(y%2 == 0) returnsquare(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  44. rec_pow(2, 2) rec_pow(2, 7) rec_pow(2, 3) rec_pow(2, 6) rec_pow(2, 1) x x x x x y y y y y 2 2 2 2 2 2 1 6 7 3 Returns… Returns… Returns… Returns… Returns… square(…) 2*… rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if(y%2 == 0) returnsquare(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  45. rec_pow(2, 7) rec_pow(2, 2) rec_pow(2, 1) rec_pow(2, 0) rec_pow(2, 6) rec_pow(2, 3) x x x x x x y y y y y y 2 2 2 2 2 2 2 1 0 3 6 7 Returns… Returns… Returns… Returns… Returns… Returns… square(…) rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if(y%2 == 0) returnsquare(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  46. rec_pow(2, 7) rec_pow(2, 2) rec_pow(2, 1) rec_pow(2, 0) rec_pow(2, 6) rec_pow(2, 3) x x x x x x y y y y y y 2 2 2 2 2 2 2 1 0 3 6 7 Returns… Returns… Returns… Returns… Returns… Returns… square(…) rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if(y%2 == 0) returnsquare(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  47. rec_pow(2, 7) rec_pow(2, 2) rec_pow(2, 1) rec_pow(2, 0) rec_pow(2, 6) rec_pow(2, 3) x x x x x x y y y y y y 2 2 2 2 2 2 2 1 0 3 6 7 Returns… Returns… Returns… Returns… Returns… Returns… square(…) 1 rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if(y%2 == 0) returnsquare(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  48. rec_pow(2, 2) rec_pow(2, 7) rec_pow(2, 3) rec_pow(2, 6) rec_pow(2, 1) x x x x x y y y y y 2 2 2 2 2 2 1 6 7 3 Returns… Returns… Returns… Returns… Returns… square(…) 2*1 rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if(y%2 == 0) returnsquare(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  49. rec_pow(2, 6) rec_pow(2, 7) rec_pow(2, 3) rec_pow(2, 2) x x x x y y y y 2 2 2 2 3 2 7 6 Returns… Returns… Returns… Returns… square(…) square(2) rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if(y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }

  50. rec_pow(2, 7) rec_pow(2, 3) rec_pow(2, 6) x x x y y y 2 2 2 6 3 7 Returns… Returns… Returns… 2*4 square(…) rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if(y%2 == 0) returnsquare(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); }