ヒープの探索の再帰
A[N]を利用したヒープのプログラムを作りました。
A[i]の親は、A[(i-1)/2]であるヒープです。
(上に行くほど小さい整数を格納)
そしていまある整列されたヒープのなかからキーボードから入力した値xを検索する関数findを、
x ←検索する値
A[]←ヒープソートされた配列
n ←格納されているA[]の最後の添え字
として、
int find(int x, int *A, int i, int n)
{
if(A[i]==x){
printf("*\n"); /* ここの作業が行われているかを確認 */
return 1;
}
if(i>n)return 0;
if(A[i]>x){
return 0;
}
else if (A[i]<x){
i = 2*i + 1;
find(x, A, i, n);
i++;
find(x, A, i, n);
}
return 0;
}
というものを作ってみました。汚いかもしれませんが、とりあえず今はこれでいっぱいいっぱいです。
それで、当然のごとくうまくいきませんでした。
/**/内に書いたように、入力したxがヒープ内にある場合は「*」が一応表示されるのですが、どうもfindは1を返してくれません。0を返してしまいます。見つけた後もまだ再帰をくりかえしえしているようです。
どこがいけないのでしょうか。
お礼
参考になりました。 ご回答いただき、ありがとうございました。