Соотнесите алгоритм, использующий рекурсивную функцию с аналогичным алгоритмом, реализующим решение с помощью динамики. int f(int n) { if (n == 0 || n == 1) return 1; else return n * f(n - 1); } void f(int n, int p = 2) { if (n <= 1) return 0; while (n % p == 0) { cout << p << endl; n /= p; } f(n, p + 1); } int f(int n) { if (n == 0) return 0; else return n % 10 + f(n / 10); } int f(int n) { if (n == 0) return 0; else if (n == 1) return 1; else return f(n - 1) + f(n - 2); } int f(int n) { int result = 1; for (int i = 1; i <= n; i++) { result *= i; } return result; } int f(int n) { int a = 0; int b = 1; if (n == 0) { return a; } else if (n == 1) { return b; } else { for (int i = 2; i <= n; i++) { int temp = b; b = a + b; a = temp; } return b; } } void f(int n) { int p = 2; while (n > 1) { if (n % p == 0) { cout << p << endl; n /= p; } else { p++; } } } int f(int n) { int sum = 0; while (n > 0) { int digit = n % 10; sum += digit; n /= 10; } return sum; }
Задание

Соотнесите алгоритм, использующий рекурсивную функцию с аналогичным алгоритмом, реализующим решение с помощью динамики.

  • Объекты 1
    • int f\(int n\) {
      if \(n == 0 \|\| n == 1\)
      return 1;
      else
      return n * f\(n \- 1\);
      }
    • void f\(int n, int p = 2\) {
      if \(n \\lt = 1\)
      return 0;
      while \(n % p == 0\) {
      cout << p << endl;
      n /= p;
      }
      f\(n, p \+ 1\);
      }
    • int f\(int n\) {
      if \(n == 0\)
      return 0;
      else
      return n % 10 + f\(n / 10\);
      }
    • int f\(int n\) {
      if \(n == 0\)
      return 0;
      else if \(n == 1\)
      return 1;
      else
      return f\(n \- 1\) + f\(n \- 2\);
      }
  • Объекты 2
    • int f\(int n\) {
      int result = 1;
      for \(int i = 1; i \\lt = n; i\+\+\) {
      result *= i;
      }
      return result;
      }
    • int f\(int n\) {
      int a = 0;
      int b = 1;
      if \(n == 0\) {
      return a;
      }
      else if \(n == 1\) {
      return b;
      }
      else {
      for \(int i = 2; i \\lt = n; i\+\+\) {
      int temp = b;
      b = a + b;
      a = temp;
      }
      return b;
      }
      }
    • void f\(int n\) {
      int p = 2;
      while \(n \\gt 1\) {
      if \(n % p == 0\) {
      cout << p << endl;
      n /= p;
      }
      else {
      p++;
      }
      }
      }
    • int f\(int n\) {
      int sum = 0;
      while \(n \\gt 0\) {
      int digit = n % 10;
      sum += digit;
      n /= 10;
      }
      return sum;
      }