C++에서 숫자의 계승 계산

Jinku Hu 2023년10월12일
  1. 반복 방법을 사용하여 C++에서 숫자의 계승 계산
  2. 재귀 적 방법을 사용하여 숫자의 계승 계산
C++에서 숫자의 계승 계산

이 기사에서는 C++에서 숫자의 계승을 계산하는 방법에 대한 몇 가지 방법을 설명합니다.

반복 방법을 사용하여 C++에서 숫자의 계승 계산

숫자의 계승은 주어진 숫자를 포함하여 1부터 시작하여 모든 정수를 곱하여 계산됩니다. 간단한 알고리즘은 루프 문 중 하나를 사용하여 반복을 사용하는 것입니다. 다음 예제 코드에서는 곱해진 값을 변수에 누적하고 결과 정수를 호출자에게 반환하는while루프를 구현했습니다. 루프는 각 사이클에서 숫자를 감소시키고 감소되기 전에 값을 저장하기 위해n--표현식을 사용합니다.

#include <iostream>
#include <string>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

int factorial1(int n) {
  int ret = 1;
  while (n > 1) ret *= n--;
  return ret;
}

template <typename T>
void printVector(vector<T> &vec) {
  for (const auto &item : vec) {
    cout << item << ", ";
  }
  cout << endl;
}

int main() {
  vector<int> vec = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  printVector(vec);

  for (const auto &item : vec) {
    cout << factorial1(item) << ", ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

출력:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800,

재귀 적 방법을 사용하여 숫자의 계승 계산

또 다른 해결책은 계승 계산을 위해 재귀 함수 호출을 사용하는 것입니다. 재귀는 본문에서 자신을 호출하는 함수의 기능입니다. 재귀 함수의 주요 부분은 호출자에게 반환되고 무한 루프 스타일 동작으로 끌리지 않도록하는 조건을 정의하는 것입니다. 이 경우, 재귀 호출이 이루어져야하는 상태를 나타 내기 위해if조건을 지정합니다. 그렇지 않으면 함수는 1을 반환해야합니다.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

int factorial2(int n) {
  if (n > 1) return factorial2(n - 1) * n;
  return 1;
}

template <typename T>
void printVector(vector<T> &vec) {
  for (const auto &item : vec) {
    cout << item << ", ";
  }
  cout << endl;
}

int main() {
  vector<int> vec = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  printVector(vec);

  for (const auto &item : vec) {
    cout << factorial2(item) << ", ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

출력:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800,

또는?:표현식이 주어진 숫자가0또는1과 같은지 평가하는 한 줄 구현에서 재귀 함수를 병합 할 수 있습니다.이 경우 함수는1을 반환합니다. 조건이 거짓이면 재귀 호출이 이루어지고 조건이 참이 될 때까지 새 함수 스택 프레임을 계속합니다. 예제 코드는 선언 된vector에있는 각 요소의 계승을 출력합니다.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

int factorial3(int n) { return (n == 1 || n == 0) ? 1 : n * factorial3(n - 1); }

template <typename T>
void printVector(vector<T> &vec) {
  for (const auto &item : vec) {
    cout << item << ", ";
  }
  cout << endl;
}

int main() {
  vector<int> vec = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  printVector(vec);

  for (const auto &item : vec) {
    cout << factorial3(item) << ", ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

출력:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800,
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C++ Math