No.1ベストアンサー
- 回答日時:
Prologですか、なつかしいっす。
<方針1>
Prologらしくバックトラック機構を生かして作るとすると…、
まず、0から順に数字を発生させる述語を作ります。逆階乗のプログラムでは、この述語を呼び、戻り値をすでに作ってある階乗の述語にかけ、その結果が与えられた数と等しければ発生させた数を答えとして返し、等しくなければバックトラックによって次の数を試します。
ただ、毎回階乗計算をし直すので、効率は悪いですね。
<方針2>
バックトラックせずに再帰で、積が与えられた数になるまで繰り返す、効率の良いバージョン。与えられた数が1なら、答え0でおしまい。そうでない場合、現在のNとN!を渡せるように引数を2つ増やした述語を、最初はN=1,N!=1で呼ぶことにします。この述語では、再帰のたびにNを1ずつ増やし、現在の積はN!として、それが与えられた数になるまで再帰を繰り返し、一致したらその時のNを答えとして返します。
どちらもN!が与えられた数を越えたらfailするようにしないと、対応するNがない時に止まらなくなります。また1に対しては0と1の両方が(バックトラックで)帰るようにした方がいいでしょうね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 代数学 環 1 2022/10/12 17:29
- 数学 数学の質問です。 関数f(t)のフーリエ変換をF(ω)=∫[-∞→∞]f(t)exp(-iωt)dt 1 2023/07/29 01:08
- 数学 逆関数についてですが、y=f(x)の逆関数をy=g(x)とすると、y=f(x)が(a,b)を満たす時 5 2023/08/25 02:35
- その他(プログラミング・Web制作) パイソンのプログラミングについての質問です 2 2023/05/22 12:39
- 数学 「y=f(x) の逆関数はxとyを入れ替えたものなので、x=f(y)」ということについてですが、 例 5 2023/08/25 09:08
- 統計学 偏差値と割合の関数について 4 2023/05/25 11:50
- 数学 逆関数 5 2022/10/19 15:58
- 数学 ほんとに何度もすみません。 どうか相手にしてください。 逆関数というのは、「出力と入力の関係式を逆に 16 2023/08/25 20:45
- 数学 僕の理解力がないため、何度も質問すみません。 逆関数についてですが、なぜy=2xの逆関数はx=2yと 2 2023/08/25 17:52
- 数学 数学の問題でモヤモヤしてます 7 2023/08/15 21:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムの規模を表す単位「k...
-
パソコンでインターネット接続...
-
ubuntuで デイスク/deb/loopと...
-
Macと iPadの違いについて 今現...
-
ワープロ検定の勉強法について。
-
エクセルのHLOOKUP関数の検索範...
-
ネットワークアイコンが黄色三...
-
タイピング速度を上げる方法に...
-
RS-FF回路について
-
タイピングの癖
-
Excel VBA マクロ処理 リンク先...
-
gccでスタックサイズを変更する...
-
エラー?メッセージ
-
ブラインドタッチ、苦手なんで...
-
printf / sprintf のスタック消...
-
最大スタックサイズを大きくす...
-
ブロック化因数(ブロッキング...
-
タイピングを極めたい
-
VB.netでDLLを読み込んで実行す...
-
タッチタイピング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムの規模を表す単位「k...
-
ステップ数について
-
ステップ数??
-
ライン数とステップ数の違いに...
-
VB6.0で #の意味
-
プログラムで 一番大きい を定...
-
ステップカウントツールが作成...
-
STEPについて
-
シェルスクリプトについて
-
PythonのプログラムのDirに関す...
-
URLの中の「?=○○」の意味は?
-
ステップ数によるスケジュール
-
「ByRef引数の型が一致しません...
-
c言語プログラミングのプログラ...
-
剰余を求めるプログラム
-
再帰について
-
prologでNの階乗の逆関数を考...
-
ドット絵のようなやつを作るに...
-
基本情報技術者の擬似言語プロ...
-
パソコンでインターネット接続...
おすすめ情報