以前質問し、回答して頂きましたtomokonです。その節はお世話になりました。
今回はソースコードについてではなく、考え方について教えていただきたく思い、質問させて頂こうと伺いました。
###再帰関数の動きについて、うまくイメージができません
再帰関数を使ったプログラムを今作っているのですが、どうにも頭の中でうまく想像することができません。そこで質問なのですが、皆さまはどのように考えたりしてプログラムの理解をされているのでしょうか?
例として、順列組み合わせのコードを挙げます。
###該当のソースコード
C
1#include <stdio.h> 2 3void list(int t[]) 4{ 5 int i; 6 7 for(i = 0; i < 4; i++){ 8 printf("%d ",t[i]); 9 } 10 11 printf("\n"); 12} 13 14// 順列を求める 15void jyun(int t[], int n) 16{ 17 int i, k, w; 18 19 if (n < 2){ 20 list(t); 21 return; 22 } 23 24 k= n-1; 25 26 for(i = n - 1; i >= 0; i--){ 27 w = t[k]; 28 t[k] = t[i]; 29 t[i] = w; 30 jyun(t, k); 31 32 printf("%d %d\n", t[i], t[k]); 33 34 t[i] = t[k]; 35 t[k] = w; 36 } 37 return; 38} 39 40int main() 41{ 42 int i, tbl[4]; 43 44 for(i = 0; i < 4; i++){ 45 tbl[i] = i + 1; 46 } 47 48 jyun(tbl, 4); 49 50 return(0); 51}
###試したこと
紙に配列tblがどのように変化したかを書いたのですが、書いていく内に数が多くなり、どの配列の部分にどの変数が入ってどういう数が格納されたか、今プログラムのどの部分にいるのかとこんがらがってしまいました。
以前アドバイスして頂いたように図を書いてみようかとも思ったのですが、どういう風に図を書いていいのかがまず分からず、行き詰ってしまいました。
熟練者の皆様はこういった関数を理解する時にどのように考えられているのか、是非、教えていただければと思います。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/31 15:50