投稿者 スレッド: 竹内照雄先生へまた再帰コールの問題です。ちょっとつかめたかも。なので助け舟をお願いします!!  (Read 16 times)

tyanpira

  • 新ユーザー
  • *
  • 投稿: 4
以前お尋ねしたときは、コンピューターのハード面にかかわらずにどの文字変数に何が代入されているか。関数の引数が関数になっていて引数の関数の引数が何かで再帰コールするかハードに記憶させておいた戻り値を、階乗計算させて答えに行きついたと思います。先入れ後出し法でハード面の処理をするようにするのですね。全然想像できなかったものが少し想像できる気になるのは、早合点なのでしょうか?
多分依然僕は、関数の引数に簡単なプログラムの流れで理解できる数を代入してその関数の戻り値をスタックしてあとは先入れ後出し法なので、階乗関数の引数にn,n-1,n-2,n-3,・・・・・・・3,2,1,0
先入れ後出し法より0!=1から計算していくので0!,1!,2!,3!,・・・・・・・・・,(n-3)!,(n-2)!,(n-1)!,n!の順に結果が出て最終的に0かnまでの階乗が出てくることになると思います。
ここまで頑張りましたが。ハードにとらわれないように説明されてよかったと思います。
ただ理解不足の時には先入れ後出し法の事もぽしえてほしかったです。ちょっと生意気でしたごめんなさい。息も切れてきました。
ここまで頑張り続けられたのは竹内照雄先生のおかげです。
理解が、誤っている点があるのは何度も指摘され無くすようにしてきたつもりですが。よろしくお願いします!!!!!





再帰的定義の例
 よく挙げられる例として,階乗関数があります。階乗関数 n!は

n!=1・2・3・・・n

で定義されるものです。この定義はこれでよいのですが,よく考えてみると,・・・と言う部分を含んでいて,この・・・の意味が明確とは言えません。そこで,もう少し明確な定義として,

0!=1,
n>0 のとき, n!=(n-1)!・n
とすることも出来ます。

 ここで,n!の定義式の右辺に,(n-1)!という階乗関数の式が表れてることに注意して下さい。階乗関数が表れていますが,しかし,この式は左辺の階乗関数n!よりも簡単なものです。そして,n=0の場合,0!=1であると定められています。

 この定義を使って,実際に3!を計算してみると,次のようになります。

3>0だから, 3!=2!*3 
ここで,2!を計算する。
2>0だから,2!=1!*2
ここで1!を計算する。
1>0だから,1!=0!*1
ここで0!=1である。これを使って,上の計算を逆にたどる。
1!=0!*1=1*1=1
2!=1!*2=1*2=2
3!=2!*3=2*3=6
このようにして3!が計算されます。
 このような定義の仕方を再帰的定義と言います。