第16講 関数の再帰的呼び出しによる3次・4次魔方陣の作成
第7話 ソース解説その4

続いてトレースしていきたいと思いますが、1つだけ注意点を挙げてからトレースを続けます。
それは、

16
10 11
12 13 14 15


今までこのように書いてきましたが、
実際にはg=4以降の世界は、
まだ存在していませんから、
正確には、

16


と書かないといけませんし、
g=3の世界のループが終わり、
g=2の世界に戻ったときも、
g=3の世界は消滅してしまっていますので、


のように書くのが正解です。
関数は終わると消滅するのです。
つまり、その世界が消滅するのです。
ですからこれからの動きは正確に書いていくことにします。
で動きをしばらく追いましょう。



















・・・




16








ここまで来ても横合計は23にしかならず、再びg=3の世界は終了消滅して、g=2の世界に戻り、


となり、再びg=3の世界に飛び(とんだ瞬間にg=3が生成(創造)される)、









・・・・・・

16


これでも合計は24にしかならず、
               if(x==n-1){
                 wa=0;
                 for(j=0;j<n;j++)wa+=a[y][j];
                 if(wa!=n*(n*n+1)/2)h=0;
               }
をクリアできません。
以下同様に動いていって

15 16


になったときはじめて横合計が34になって、
               if(x==n-1){
                 wa=0;
                 for(j=0;j<n;j++)wa+=a[y][j];
                 if(wa!=n*(n*n+1)/2)h=0;
               }
をクリアして、ようやくg=4の世界の創造ということになって、

15 16


となります。

本当はg=5以降の世界はありませんが、
表を書くのがむずかしいので書いてあるだけです。







以下同様に動いていって

15 16
12 14
10 11
13 10
12 13 14 15
11


と1個目の魔方陣が出来上がります。



















途中かなりはしょりましたが、皆さんははしょった部分をご自分でトレースしてみて下さい。
次講では、さらにソフトの改良を行います。




第16講第6話へ 第17講(旧講義)第1話へ 第17講(再講義)第1話へ



VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座