第16講 関数の再帰的呼び出しによる3次・4次魔方陣の作成
第7話 ソース解説その4
続いてトレースしていきたいと思いますが、1つだけ注意点を挙げてからトレースを続けます。
それは、
0 | 1 | 2 | 3 | |
0 | 0 | 1 | 2 | 3 |
1 | 2 | 3 | 16 | |
1 | 4 | 5 | 6 | 7 |
□ | □ | □ | □ | |
2 | 8 | 9 | 10 | 11 |
□ | □ | □ | □ | |
3 | 12 | 13 | 14 | 15 |
□ | □ | □ | □ |
今までこのように書いてきましたが、
実際にはg=4以降の世界は、
まだ存在していませんから、
正確には、
0 | 1 | 2 | 3 | |
0 | 0 | 1 | 2 | 3 |
□1□ | □2□ | □3□ | 16 |
と書かないといけませんし、
g=3の世界のループが終わり、
g=2の世界に戻ったときも、
g=3の世界は消滅してしまっていますので、
0 | 1 | 2 | |
0 | 0 | 1 | 2 |
□1□ | □2□ | □4□ |
のように書くのが正解です。
関数は終わると消滅するのです。
つまり、その世界が消滅するのです。
ですからこれからの動きは正確に書いていくことにします。
で動きをしばらく追いましょう。
0 | 1 | 2 | |
0 | 0 | 1 | 2 |
□1□ | □2□ | □4□ |
0 | 1 | 2 | 3 | |
0 | 0 | 1 | 2 | 3 |
□1□ | □2□ | □4□ | □1□ |
0 | 1 | 2 | 3 | |
0 | 0 | 1 | 2 | 3 |
□1□ | □2□ | □4□ | □2□ |
0 | 1 | 2 | 3 | |
0 | 0 | 1 | 2 | 3 |
□1□ | □2□ | □4□ | □3□ |
0 | 1 | 2 | 3 | |
0 | 0 | 1 | 2 | 3 |
□1□ | □2□ | □4□ | □4□ |
0 | 1 | 2 | 3 | |
0 | 0 | 1 | 2 | 3 |
□1□ | □2□ | □4□ | □5□ |
0 | 1 | 2 | 3 | |
0 | 0 | 1 | 2 | 3 |
□1□ | □2□ | □4□ | □6□ |
・・・
0 | 1 | 2 | 3 | |
0 | 0 | 1 | 2 | 3 |
□1□ | □2□ | □4□ | □16□ |
ここまで来ても横合計は23にしかならず、再びg=3の世界は終了消滅して、g=2の世界に戻り、
0 | 1 | 2 | |
0 | 0 | 1 | 2 |
□1□ | □2□ | □5□ |
となり、再びg=3の世界に飛び(とんだ瞬間にg=3が生成(創造)される)、
0 | 1 | 2 | 3 | |
0 | 0 | 1 | 2 | 3 |
□1□ | □2□ | □5□ | □1□ |
0 | 1 | 2 | 3 | |
0 | 0 | 1 | 2 | 3 |
□1□ | □2□ | □5□ | □2□ |
0 | 1 | 2 | 3 | |
0 | 0 | 1 | 2 | 3 |
□1□ | □2□ | □5□ | □3□ |
・・・・・・
0 | 1 | 2 | 3 | |
0 | 0 | 1 | 2 | 3 |
□1□ | □2□ | □5□ | □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;
}
をクリアできません。
以下同様に動いていって
0 | 1 | 2 | 3 | |
0 | 0 | 1 | 2 | 3 |
□1□ | □2□ | □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の世界の創造ということになって、
0 | 1 | 2 | 3 | |
0 | 0 | 1 | 2 | 3 |
1 | 2 | 15 | 16 | |
1 | 4 | 5 | 6 | 7 |
□ | □ | □ | □ |
となります。
本当はg=5以降の世界はありませんが、
表を書くのがむずかしいので書いてあるだけです。
以下同様に動いていって
0 | 1 | 2 | 3 | |
0 | 0 | 1 | 2 | 3 |
1 | 2 | 15 | 16 | |
1 | 4 | 5 | 6 | 7 |
12 | 14 | 3 | 5 | |
2 | 8 | 9 | 10 | 11 |
13 | 7 | 10 | 4 | |
3 | 12 | 13 | 14 | 15 |
8 | 11 | 6 | 9 |
と1個目の魔方陣が出来上がります。
途中かなりはしょりましたが、皆さんははしょった部分をご自分でトレースしてみて下さい。
次講では、さらにソフトの改良を行います。
第16講第6話へ 第17講(旧講義)第1話へ 第17講(再講義)第1話へ
VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual
Basic入門基礎講座