• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:再起処理について)

再起処理について

このQ&Aのポイント
  • クリティカルパス長の値が1以外の値になっているのが分かりません。
  • 後続タスクにはFFGGGIJJLLMPPPQQを入力してください。
  • 再起処理を使ってクリティカルパスの長さを求める関数が実装されています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

> printf("3?n"); > return(critical_path(ary[SUCC][i] - 'A', ary) + 1); > printf("4?n"); 再帰呼び出しの結果をそのまま返してるので、4番にいかないですね。 int ret; printf("3?n"); ret = (critical_path(ary[SUCC][i] - 'A', ary) + 1); printf("4 %d?n", ret); return ret; こうすれば、再帰呼び出しの結果が出力されるので、わかりやすいと思いますよ。

yukikundesuyo
質問者

お礼

どうもご親切にありがとうございます。 おかげでスッキリと理解することが出来ました。

その他の回答 (1)

回答No.1

>クリティカルパス長の値が1以外の値になっているのが分かりません。 elseのときに1以外の値を返しているからです。 もっとシンプルな例で動作をみるとわかりやすいんじゃないでしょうか。 #include <stdio.h> int recursive_call_test ( int x ) { int y; if ( x<=1 ) { return 1; } else { y = recursive_call_test(x-1) + x; printf(" %d %2d?n", x, y); return y; } } int main ( int argc, char** argv ) { int x; for ( x=1; x<10; x++ ) { printf("%d: %2d?n", x, recursive_call_test(x)); } return 0; }

yukikundesuyo
質問者

補足

回答ありがとうございます。 上記サンプルは理解できましたが、私のソースの方がまだ理解できない次第です。 上記サンプルを私が理解しやすいように変更しました。 下記ソース #include <stdio.h> int recursive_call_test ( int x ) { int y; printf("1\n"); if ( x<=1 ) { printf("return\n"); return 1; } else { printf("2\n"); y = recursive_call_test(x-1) + x; printf("%d:%d?a\n", x, y); return y; } } int main ( int argc, char** argv ) { int x; for ( x=1; x<10; x++ ) { printf("%d:%d?b\n", x, recursive_call_test(x)); } return 0; } (実行結果) 1 return 1:1?b 1 2 1 return 2:3?a 2:3?b この場合retrun yで返っている値が3ということが分かります。なので2:3?bの3という値は納得できます。 (私のソースです) int critical_path(int i, int ary[][TASK]) { printf("i = %d\n", i); printf("1\n"); if((char)ary[SUCC][i] == '@'){ printf("2\n"); printf("return \n"); return(1); } else{ printf("3\n"); return(critical_path(ary[SUCC][i] - 'A', ary) + 1); printf("4\n"); } } (実行結果) 後続タスクの入力(ないものは'@') タスク : ABCDEFGHIJKLMNOPQ 後続タスク : FFGGGIJJLLMPPPQQ@ i = 0 1 3 i = 5 1 3 i = 8 1 3 i = 11 1 3 i = 15 1 3 i = 16 1 2 return tbl[PATH][i] = 6 この場合return(1);で処理が終わっています。 なのでこの1が6に成るのが分からない次第です。 回答のほど宜しくお願いいたします。

関連するQ&A

専門家に質問してみよう