#質問内容
二分探索の関数の作成についてです。for文を用いて二分探索の関数binaryを作成することはできたのですが、再帰呼び出しを用いてbinary関数を作成する方法の一部が分かりません。以下にプログラムと分からない箇所を示します。他の部分は合っていると思うのですが、もしお気づきの点があればご教授頂けると幸いです。
ループを用いた二分探索のプログラム
#include <stdio.h> /* プロトタイプ宣言 */ int binary(int n, int *data, int x); /* メイン関数 */ int main() { int data[8] = {1, 2, 3, 4, 5, 6, 7, 8}; printf("%d", binary(8, data, 7)); } /* binary関数の定義 */ int binary(int n, int *data, int x) /* nは配列の要素数 */ /* xは検索したい数字 */ { int left = 0; int right = n - 1; while(left <= right) { int middle = (left + right) / 2; if(x == data[middle]) { return middle + 1; }else if(x < data[middle]) { right = middle - 1; }else { left = middle + 1; } return 0; }
#再帰呼び出しを用いた二分探索のプログラム
#include <stdio.h> /* プロトタイプ宣言 */ int binary(int n, int *data, int x); /* メイン関数 */ int main() { int data[8] = {1, 2, 3, 4, 5, 6, 7, 8}; printf("%d", binary(8, data, 7)); } /* binary関数の定義 */ int binary(int n, int *data, int x) { int middle = (n - 1) / 2; if(x == data[middle]) { return middle + 1; }else if(x > data[middle]) { /* この部分が分かりません */ }else { return binary(middle, data, x); } return 0; }
#実行結果
7
回答1件
あなたの回答
tips
プレビュー