C++
 Computer >> コンピューター >  >> プログラミング >> C++

【C++】再帰を使ってn個の整数のGCD(最大公約数)の式を出力するプログラム

この記事では、整数が入力として与えられたときに、再帰(リカージョン)を利用してn個の整数のGCD(最大公約数)を求める式を出力する方法を解説します。

GCDには次のような性質があります。3つの数 a1、b1、c1 の最大公約数は gcd(a1, gcd(b1, c1)) のように表せます。これを一般化すると、3つ以上の数についても、

gcd(a1, gcd(b1, gcd(c1, …, gcd(y1, z1))))

という入れ子構造の式でGCDを求めることができます。

実行例

入力: Num = 4;

出力:

Formula is:
GCD(int a3, GCD(int a2, GCD(int a1, int b1)))

入力: Num = 6;

出力:

Formula is: GCD(int a5, GCD(int a4, GCD(int a3, GCD(int a2, GCD(int a1, int b1)))))

プログラムのアプローチ

このアプローチでは、引数として数の個数を受け取り、その個数に対応するGCDの式を含む文字列を返す再帰関数 gcdFormula(int num1) を使用します。

ベースケース: num1 が 1 の場合、文字列 "int b" + to_string(num1) を返します。
再帰ケース: それ以外の場合は、gcdFormula(num1 - 1) を再帰的に呼び出し、その結果に前段の文字列を連結して返します。

具体的な手順は以下の通りです。

  • 個数を表す数値 Num を入力として受け取ります。
  • 関数 gcdFormula(int num1) は、数の個数を受け取り、対応するGCDの式を含む文字列を返します。
  • num1 が 1 の場合、文字列 "int b" + to_string(num1) を返します。
  • それ以外の場合は、"GCD(int a" << num1 - 1 << ", " を出力します。
  • 続いて再帰呼び出しを行い、return (gcdFormula(num1 - 1) + ")") として閉じ括弧を追加します。
  • 最終的に完全な式の文字列が返されます。
  • main関数内で結果を出力します。

C++サンプルコード

#include <bits/stdc++.h>
using namespace std;
string gcdFormula(int num1){
   if (num1 == 1){
      return ("int b"+to_string(num1)+"");
   }
   else{
      cout<<"GCD(int a"<<num1-1<<", ";
      return (gcdFormula(num1 - 1)+")");
   }
}
int main(){
   int Num = 6;
   cout<<"Formula is :"<<endl;
   cout<<gcdFormula(Num);
   return 0;
}

出力結果

上記のコードを実行すると、以下の出力が得られます。

Formula is :
GCD(int a6, GCD(int a5, GCD(int a4, GCD(int a3, GCD(int a2, GCD(int a1, int b1))))))
  1. 配列の全要素を乗算するC++プログラムの解説

    整数型の要素を持つ配列が与えられたとき、配列内のすべての要素を掛け合わせ、その積を表示することを考えます。本記事では、この問題をC++(C言語スタイルのコード)で解く方法を、アプローチ、アルゴリズム、サンプルコード、実行結果まで順を追って解説します。 例 入力: arr[]={1,2,3,4,5,6,7} 出力: 1 x 2 x 3 x 4 x 5 x 6 x 7 = 5040 入力: arr[]={3, 4, 6, 2, 7, 8, 4} 出力: 3 x 4 x 6 x 2 x 7 x 8 x 4 = 32256 解き方のアプローチ この問題は、累積用の一時変数を用意し、配列の要素を先頭

  2. C++で8進数を10進数に変換するプログラムの書き方

    8進数が入力として与えられたとき、それを10進数に変換するのが本記事のテーマです。 コンピュータ上の10進数は基数10で表現されます。一方、8進数は基数8で表現され、使用できる数字は0〜7に限られます。これに対して10進数では、0〜9までの任意の数字を使用することができます。 8進数から10進数への変換手順 右から左へ向かって剰余演算により各桁を取り出し、0から始まるべき乗を掛けます。指数は「桁数 − 1」に達するまで1ずつ増加させます。 8進数を変換するため、べき乗の基数は8となります(8進数の基数が8であるため)。 入力された数値の各桁に基数とべき乗を掛け、その結果を記録します。 すべて