7 11牛客題(遞迴)

2022-08-01 14:51:14 字數 832 閱讀 9286

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...