1. 程式人生 > >怎麼寫一個遞迴程式

怎麼寫一個遞迴程式


  尾遞迴
  到此其實你已經可以寫出任何一個完整的遞迴程式了,雖然上面的例子比較簡單,但是方法總是這樣的。不過我們可以對遞迴程式再進一步分析。二分查詢的遞迴演算法中我們注意到在遞迴呼叫之後僅僅是返回了其返回值,這樣的遞迴稱作尾遞迴。儘管在編寫的時候不必考慮遞迴的呼叫順序,但真正執行的時候,遞迴的函式呼叫過程可以分為遞和歸兩部分。在遞迴呼叫之前的部分稱作遞,呼叫之後的部分稱作歸。而尾遞迴在歸的過程中實際上不做任何事情,對於這種情況可以很方便的將這個遞迴程式轉化為非遞迴程式。
int binary_search(int* array, int start, int end, int num_wanted) 
{ 
  int middle; 
search: 
  middle = (end - start)/2 + start; 
  if(end < start){ 
    return -1; 
  }else if(num_wanted == array[middle]){ 
    return middle; 
  } 
  if(num_wanted > array[middle]){ 
    start = middle+1; 
    end = end; 
    goto search; 
    //index = binary_search(array, middle+1, end, num_wanted);
  }else{ 
    start = start; 
    end = middle-1; 
    goto search; 
    //index = binary_search(array, start, middle-1, num_wanted);
  } 
}