1、對遞迴程式的優化的一般的手段為(a)
a 尾遞迴優化
b 迴圈優化
c 堆疊優化
d 停止值優化
解析:尾遞迴:
在函式返回的時候,呼叫自身本身,並且,return語句不能包含表示式。這樣,編譯器或者直譯器就可以把尾遞迴做優化,使遞迴本身無論呼叫多少次,都只占用乙個棧幀,不會出現棧溢位的情況。 尾遞迴呼叫時,如果做了優化,棧不會增長,因此,無論多少次呼叫也不會導致棧溢位。 遺憾的是,大多數程式語言沒有針對尾遞迴做優化。
以斐波那契數列為例子
普通的遞迴版本
int fab(int n)
具有"線性迭代過程"特性的遞迴—尾遞迴過程
int fab(int n,int b1=1,int b2=1,int c=3)
}以fab(4)為例子
普通遞迴fab(4)=fab(3)+fab(2)=fab(2)+fab(1)+fab(2)=3 6次呼叫
尾遞迴fab(4,1,1,3)=fab(4,1,2,4)=1+2=3 2次呼叫
2、採用遞迴方式對順序表進行快速排序,下列關於遞迴次數的敘述中,正確的是()
遞迴次數與每次劃分後得到的分割槽處理順序無關。
解析:遞迴次數,取決於遞迴樹,而遞迴樹取決於軸樞的選擇。樹越平衡,遞迴次數越少。
快速排序的 遞迴的次數與 初始 資料的排列順序有關。
遞迴次數和資料排列有關 若有序,這次數為0(n)。理論上最少的次數為0(logn)。
而對分割槽的長短處理順序,影響的是遞迴時對棧的使用記憶體,而不是遞迴次數。先處理短的可以減小遞迴深度。
7 11牛客題(賦值 運算子優先順序)
對以下程式,正確的輸出結果是 d 123 4567 891011 1213 14 include define sub x,y x y define access before element,offset,value sub element,offset value intmain inti ac...
牛客 題庫 遞迴
1.下列 的輸出是?注 print已經宣告過 main print char s 解答 輸出的是 suiene 注意,字母前面有乙個空格 這裡考察了兩個知識點 遞迴和print s 指標先移動,然後呼叫函式。找到一篇講解遞迴的部落格 遞迴演算法 程式呼叫自身的程式設計技巧稱為遞迴 recursion...
牛客網程式設計題
參考了排行榜大神 1.計算字串最後乙個單詞的長度,單詞以空格隔開 a raw input b a.split print len b 1 2.寫出乙個程式,接受乙個有字母和數字以及空格組成的字串,和乙個字元,然後輸出輸入字串中含有該字元的個數。不區分大小寫 a raw input lower b r...