2017-10-05 16 views
-4
// RecursiveBinarySearch.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 
#define N 9 

int RecursiveBinarySearch(int A, int low, int high, int x); 

int main() 
{ 
    int A[N]; 
    int index = 0; 
    //Put 
    A[0] = 2; 
    A[1] = 6; 
    A[2] = 13; 
    A[3] = 21; 
    A[4] = 36; 
    A[5] = 47; 
    A[6] = 63; 
    A[7] = 81; 
    A[8] = 97; 

    printf("Elements in Array A\n"); 

    while (index <= 8) { 
     printf("%d ", A[index]); 
     index++; 
    } 

    printf("\nLocation(index) of element 63\n"); 

    printf("%d", RecursiveBinarySearch(A, 0, 8, 63)); 

    return 0; 
} 


int RecursiveBinarySearch(int A, int low, int high, int x) { 

    //Base Condition 
    if (low > high) 
     return -1; 

    int mid = low + (high - low)/2; 

    if (x == A[mid]) 
     return mid; 
    else if (x < A[mid]) 
     return RecursiveBinarySearch(A, low, mid - 1, x); 
    else 
     return RecursiveBinarySearch(A, mid + 1, high, x); 

} 

ここに最初の問題があります。 Visual Studioは、ここで第二の問題だ "int型"再帰バイナリ検索c

int型A [9] 引数タイプの "INT *は" 型のパラメータと互換性がありませんと言います。 int型ミッド 式が持っている必要がありますへのポインタオブジェクトタイプ

私はこのコードをコンパイルしてどのようにこのコードでは、ポインタを使用することができない理由を知りたいので、私はよくポインタのことは知りません。

+2

配列( 'int []')は単一の 'int'と同じではないので、あなたの関数が配列を渡すときに期待したことは?値? –

+2

引数Aの宣言を 'int * A'に変更してください –

+0

(行番号を含むエラーメッセージの場合は、その番号を引用符に含めてください)あなたの投稿に含まれているコードの項目を参照する場合、 "backticks"を使って目立ちます: 'int A [9]'、 'int mid'v) – greybeard

答えて

2

ベターalltogetherすべてassignements A[0] = ..., A[1] = ...を削除し、書き込み:

int A[] = {2,6,13,21,36,47,63,81,97} 

をANDで

while (index <= 8) 

置き換える:

while (index < sizeof(A)/sizeof(A[0])) 

sizeof(A)/sizeof(A[0])が配列Aかの要素の数です。 sizeof(A)は配列全体のサイズ(バイト)、sizeof(A[0])は配列の1要素のサイズ(バイト)です。


しかし、本当の問題はここにある:

は交換してください:

int RecursiveBinarySearch(int A, int low, int high, int x) 

int RecursiveBinarySearch(int A[], int low, int high, int x) 

によってけれどもより多くのエラーがあるかもしれません。

1

スタート取っコンパイラの警告真剣:

あなたはこのよう RecursiveBinarySearchを変更する必要がありますので、すでに、あなたは再帰的な二分探索法に配列を渡しているコメントの人々で指摘したように
helpPointer.c: In function ‘main’: 
helpPointer.c:30:40: warning: passing argument 1 of ‘RecursiveBinarySearch’ makes integer from pointer without a cast [-Wint-conversion] 
    printf("%d", RecursiveBinarySearch(A, 0, 8, 63)); 
             ^
helpPointer.c:4:5: note: expected ‘int’ but argument is of type ‘int *’ 
int RecursiveBinarySearch(int A, int low, int high, int x); 
    ^~~~~~~~~~~~~~~~~~~~~ 

int RecursiveBinarySearch(int A[], int low, int high, int x); 
1と同じものです

それとも

int RecursiveBinarySearch(int *A, int low, int high, int x); 

、SI nce配列名は配列の最初の要素を指すポインタにすぎません。あなたが配列とポインタの間の関係について多くの考えを持っていない場合はthisを読んでください。

関連する問題