2016-03-15 103 views
1

對不起,如果這是一個愚蠢的問題,但我很新的編程。 我一直在研究排序,合併排序一直讓我頭疼。在其功能定義中使用相同的功能?

void part(int arr[],int min,int max) 
{ 
int mid; 
if(min<max) 
{ 
    mid=(min+max)/2; 
    part(arr,min,mid); 
    part(arr,mid+1,max); 
    merge(arr,min,mid,max); 
} 
} 

我不明白你怎麼可以在它自己的定義中使用函數部分,當它甚至還沒有完全定義。此外,我真的不明白這是如何工作..請幫我理解這一點!

任何幫助非常感謝。謝謝。

+0

http://cprogrammingcodes.blogspot.com/2012/02/merge-sorting.html 這裏是完整的代碼,以防萬一你想看.. – brood915

+6

看看[遞歸](https://en.wikipedia .org/wiki/Recursion_(computer_science)) – NathanOliver

+0

ahhh這就是我所設想的,但卻不敢接受它......嘆了口氣。然後再挖掘它。謝謝。 – brood915

回答

2

C++區分定義函數和聲明函數,不同之處在於聲明一個函數只是爲了知道它的簽名(所以void part(int arr[],int min,int max)。這就是程序的其他部分調用它的充足信息,沒有它實際上需要的代碼的機構。該定義是那麼代碼本身被定義在哪裏。

1

所有你需要調用一個函數是其聲明和函數定義也是一個自動的聲明(如果尚未宣佈) ,而這個自動聲明所需要的就是函數簽名(返回類型,名稱,參數,但是不是全身)。

如果沒有這個,將很難做到recursion,這是一個函數自己調用時會發生的情況。