No.2ベストアンサー
- 回答日時:
簡潔に説明しましょう。
ユークリッド・・大昔の数学の大家。ユークリッド幾何学、非ユークリッド幾何学の名で有名。
ユークリッドの互除法・・2つの数の最大公約数を求めるのに、最も早い、すばらしい方法。互除法というのはお互いに除算(割り算)をすると言う意味。互助法ではありません。
[ユークリッドの互除法]
(1)2つの数を、A、Bとします。仮にAが大きいとします。
(2)AをBで割って余りをRとします。
(3)Rが0なら、Bが答え(最大公約数)で終わり。
(4)BとRのうち大きいほうをAに入れ、小さいほうをBに入れます。
(5)前の(2)へ飛びます。
例をあげましょう。A=18、B=12とします。
R=mod(18,12)=6
A=12、B=6
R=mod(12,6)=0 → 終わり B=6が答え(最大公約数)
どうです。簡単でしょう。
割り算の代わりに引き算を繰り返し使う方法もあります(CASLなどでは)
この問題で、再帰処理を使うメリットは感じませんが、練習として使う事は可能です。再帰処理は質問に入っていないので、省略します。過去にも再帰処理の質問は出ています。頑張ってください。
No.1
- 回答日時:
どもども田吾作7です。
再帰法で再起不能
↑おっさんギャグ
まぁそれはそれとして、
再帰法はわかりますか?
簡単な例題を出します。
50平方の画用紙を、ある裁断機に入れると半分の大きさになります。
1平方メートル以下の大きさになるには何回通るでしょう?
VBではDO~LOOPを使う方法がありますが、再帰法で行うことも出来ます。
Option Explicit
'カット回数を表すカウンタ
Private CutCount As Long
Public Sub Main()
'ペーパーのサイズ
Dim PaperSize As Double
'基本の大きさ
PaperSize = 50
'カットした回数の初期値
CutCount = 0
'裁断機にかける
Call CutPaper(PaperSize)
MsgBox CutCount
End Sub
'裁断機
Private Sub CutPaper(inParper As Double)
'用紙サイズが1m2以下なら終了
If inParper < 1 Then Exit Sub
'用紙サイズが1m2以上であれば裁断機にかけるて自分自身を呼び出す
'(カウンタを増やし、自分自身を呼び出す)
inParper = inParper / 2
CutCount = CutCount + 1
Call CutPaper(inParper)
End Sub
このように条件を満たすまで、自分自身を呼び出すのが再帰法です。
例題があまりよくないので、これはDO~LOOPの方が好ましいかも知れません。
実際使用するとしたら、「あるフォルダ以下を全て書き込み禁止にしなさい」といった処理を行う時に、再帰法がベストだと思います。フォルダの中のファイルを書込み禁止にして、その中にフォルダが存在していたら、更にそのフォルダ内を書込み禁止にして・・・・とフォルダが存在する限り、その関数を走り続けるようになります。(サンプルはちょっと面倒なので勘弁して)
この一つ目の例題と二つ目の大きな差は、同じレベルか、それとも下のレベルかという点にあります。
ペーパーはあくまで裁断されても、単に小さいペーパーであって、最初の50平方メートルのペーパーを指します。
しかしフォルダ内の書込み禁止は、フォルダの中のサブフォルダ、またはさらにその中のサブフォルダ・・・と階層があるわけです。
前置きが長くなりましたが、ユーグリッド法はわかりませんが、ユーグリッドの互助法はこの概念と共通してます。
「ある条件が満たされるまで、一つのパターンを繰り返して行く」
まさに再帰法です。
下記URLにユーグリッドの互助法による、最大公約数の求め方がありますので、そちらをのぞいてみては?
そちらにも例題があります。
[a][b][r][r1]とか書いてありますが、例題の具体例を紙に書いてやってみると、同じこと繰り返しをしているだけで、結構単純であることに気付くと思いますよ。
参考URL:http://math1.edu.mie-u.ac.jp/~motokioh/ucurid.htm
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C#の問題で2つの整数a,bの最大公約数(GCD)を求めるユークリッドの互除法は,aをbで割った余り 2 2022/06/26 16:52
- 数学 再質問 写真は「ユークリッドの互除法」のイメージ図なのですが これで何故17が最大公約数になるのか分 4 2023/03/05 17:08
- 数学 写真は「ユークリッドの互除法」のイメージ図なのですが これで何故17が最大公約数になるのか分かりませ 2 2023/03/05 16:54
- 数学 ユークリッドの互除法、合同式の問題について 1 2022/05/08 11:49
- 数学 ユークリッド互除法なんですが最高公倍数が15なのは分かるんですけどrとsの解き方が分かりません。 教 4 2023/02/27 00:43
- 計算機科学 高校1年の数学です! ユークリッドの互除法です。 写真の左上の問題で、問題集の答えは x=14、y= 1 2023/02/25 16:59
- 大学受験 担任が無理です 6 2022/10/18 23:21
- システム CPUの問題について 2 2022/07/09 12:04
- 宅地建物取引主任者(宅建) 宅建業法で満点に近い高得点を取る勉強方法は? 4 2022/09/09 10:17
- 飲み物・水・お茶 茶葉 2 2023/04/23 20:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows10でコマンドプロンプト...
-
ファイル名と同名のフォルダを...
-
Excel VBA 同じ名前のフォルダ...
-
同一フォルダ内の別ブックから...
-
VBA フォルダ名に特定の文字を...
-
【マクロ】ファイル名の日付に...
-
ディレクトリ名変更してコピー...
-
VBA 最新のフォルダ取得
-
Downloaded Program Filesはど...
-
デスクトップの画像をhtmlに表...
-
Access VBA で フォルダ権限...
-
保存先のフォルダ名を指定した...
-
VBA フォルダの複数選択ができない
-
Hitachi Embedded Workshop (HE...
-
エクセルのマクロについて教え...
-
エクセルで、マクロを使わずに...
-
VS2005で"定義へ移動"ができません
-
多量のファイルをフォルダに自...
-
ファイル名を取得し、ログファ...
-
Dreamweaverでイメージを挿入す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows10でコマンドプロンプト...
-
パス名に2バイト文字(マルチバ...
-
ファイル名と同名のフォルダを...
-
VBA 最新のフォルダ取得
-
Excelのハイパーリンクについて...
-
デスクトップの画像をhtmlに表...
-
ディレクトリ名変更してコピー...
-
VBA フォルダ名に特定の文字を...
-
バッチファイルで指定フォルダ...
-
フォルダ内のPDFファイル名を変...
-
Access VBA で フォルダ権限...
-
excelマクロ 冒頭3文字が一致す...
-
【マクロ】ファイル名の日付に...
-
フォルダにリンクを貼りたい
-
会社のネットワーク上のファイ...
-
多量のファイルをフォルダに自...
-
C ファイル出力で、フォルダが...
-
保存先のフォルダ名を指定した...
-
vbsで選択ダイアログを表示した...
-
Excel VBA 同じ名前のフォルダ...
おすすめ情報