再起処理について
critical_pathの関数を実行したときにreturn (1);で最終的に処理が終わっているのにもかかわらず、クリティカルパス長の値が1以外の値になっているのが分かりません。
後続タスクは FFGGGIJJLLMPPPQQ@ を入力してください。
宜しくお願いいたします。
#include <stdio.h>
#define TASK 17 /* タスクの個数 */
#define SELF 0
#define SUCC 1
#define PATH 2
/* クリティカルパスの長さを求める関数 */
int critical_path(int i, int ary[][TASK]);
void main(void)
{
int tbl[3][TASK]; /* タスク情報 */
/* tbl[SELF] 自タスク (ソート後優先順位表になる) */
/* tbl[SUCC] 後続タスク */
/* tbl[PATH] クリティカルパスの長さ */
int succ; /* 後続タスク */
int i, j, k, t;
/* 後続タスクの入力 */
printf("後続タスクの入力(ないものは'@')\n");
printf(" タスク : ");
for(i = 0; i < TASK; i++){
tbl[SELF][i] = 'A' + i; /* 初期化 */
printf("%c", tbl[SELF][i]);
}
printf("\n後続タスク : ");
for(i = 0; (succ = getchar()) != '\n'; i++)
tbl[SUCC][i] = succ;
for(i = 0; i < TASK; i++){ /*クリティカルパス長*/
tbl[PATH][i] = critical_path(i, tbl);
printf("tbl[PATH][i] = %d\n", tbl[PATH][i]);
}
}
int critical_path(int i, int ary[][TASK])
{
if((char)ary[SUCC][i] == '@'){
return(1);
}
else{
return(critical_path(ary[SUCC][i] - 'A', ary) + 1);
}
}
補足
ご回答ありがとうございます。 大変参考になりました。 ご面倒ついでにもうひとつ質問よろしいでしょうか。 例えばPromise.allなどの使うというのは、サブスレッド(従業員)が複数作られ(ほぼ)同時に作業させる→並列処理。 というイメージでしょうか? よろしくお願いします。