新しく発言する EXIT インデックスへ
質問です。

  質問です。 ASA 2005/08/15 12:24:25 
  サンプルプログラムの中にあると思います。 白石 和夫 2005/08/15 14:16:08 
   └他のやり方はありますか? ASA 2005/08/15 16:20:04 
    ├サンプルプログラムに2通りほどあったと思い... 白石 和夫 2005/08/15 17:37:59 
    │└10INPUTN ASA 2005/08/15 18:40:57 
    │ └論理上はASAさんの言うとりだと思うのですが... 小塚 2005/08/15 20:31:06 
    │  └ありがとうございます。 ASA 2005/08/15 22:07:36 
    └Re:他のやり方はありますか? 河川屋 2005/08/18 00:00:33 
     └自己レス。 河川屋 2005/08/18 00:20:00 

  質問です。 ASA 2005/08/15 12:24:25  ツリーへ

質問です。 返事を書く
ASA 2005/08/15 12:24:25
自然数Nの値を入力して、Nの階乗を出力するにはどうすればいいのでしょうか??教えてくださ〜い。

  サンプルプログラムの中にあると思います。 白石 和夫 2005/08/15 14:16:08  ツリーへ

Re: 質問です。 返事を書く
白石 和夫 2005/08/15 14:16:08
サンプルプログラムの中にあると思います。
面倒なら,
10 INPUT n
20 PRINT FACT(n)
30 END
で。

   └他のやり方はありますか? ASA 2005/08/15 16:20:04  ツリーへ

Re: サンプルプログラムの中にあると思います。 返事を書く
ASA 2005/08/15 16:20:04
他のやり方はありますか?

    ├サンプルプログラムに2通りほどあったと思い... 白石 和夫 2005/08/15 17:37:59  ツリーへ

Re: 他のやり方はありますか? 返事を書く
白石 和夫 2005/08/15 17:37:59
サンプルプログラムに2通りほどあったと思います。
あるいは
10 INPUT n
20 PRINT perm(n,n)
30 END
でも求めらます。
ほかにも,対数で和を計算するなどの手法が考えられると思うので試してみてください。

    │└10INPUTN ASA 2005/08/15 18:40:57  ツリーへ

Re: サンプルプログラムに2通りほどあったと思い... 返事を書く
ASA 2005/08/15 18:40:57
10 INPUT N
20 LET S=1
25 LET M=1
30 LET S=S*N
35 LET S=S*(N-M)
40 IF M=N-1 THEN
PRINT S
GOTO 70
50 END IF
60 LET M=M+1
65 GOTO 35
70 END
今やってみたんですけど、こんな感じでも出来ますか?

    │ └論理上はASAさんの言うとりだと思うのですが... 小塚 2005/08/15 20:31:06  ツリーへ

Re: 10INPUTN 返事を書く
小塚 2005/08/15 20:31:06
論理上はASAさんの言うとりだと思うのですが、それが数学の奥が深いところではないでしょうか。

    │  └ありがとうございます。 ASA 2005/08/15 22:07:36  ツリーへ

Re: 論理上はASAさんの言うとりだと思うのですが... 返事を書く
ASA 2005/08/15 22:07:36
ありがとうございます。

    └Re:他のやり方はありますか? 河川屋 2005/08/18 00:00:33  ツリーへ

Re: 他のやり方はありますか? 返事を書く
河川屋 2005/08/18 00:00:33
Re:他のやり方はありますか?

階乗の近似値で良いという条件なら、
スターリングの近似式というのがあります。

N!=N^N/exp(N)*√(2πN)

このまま使うと、N^Nを計算した時点でオーバーフローしやすくなるから、
対数で計算してから元へ戻すことにすると、

FUNCTION FFACT(N)   !階乗(Nが大きい時。)
LET Y=N*LOG(N)-N+LOG(2*PI*N)/2
LET FFACT=EXP(Y)
END FUNCTION

大略、N>10で有効な式で、N=10の時の誤差は0.8%。
誤差はNが大きいほど小さくなります。


あと、階乗を再帰を使って定義する方法について。
数学としては、コレが最もエレガントな方法。

function f(n)
if n<=0 then
f=1
else
f=f(n-1)
end if
end function

これでも求められるのですが、これは、「再帰とは何か」の練習用であり、
オススメする気にはなれません。
※私はFORTRAN屋であるため、再帰は好きになれないのと、
 階乗の場合の再帰は、for文で普通にブン回すのに比べ計算時間がかかるため。

     └自己レス。 河川屋 2005/08/18 00:20:00  ツリーへ

Re: Re:他のやり方はありますか? 返事を書く
河川屋 2005/08/18 00:20:00
自己レス。

再帰を使った場合の階乗の訂正。
function f(n)
if n=0 then
f=1
else
f=n*f(n-1)
end if
end function


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。