劍指offer 遞迴和迴圈

2021-07-22 09:11:05 字數 1023 閱讀 4642

遞迴雖然比較簡潔,但他同時也有顯著的缺點。遞迴由於是函式呼叫自身,而函式呼叫是有時間和空間的消耗的,每一次函式呼叫都需要在記憶體棧中分配空間以儲存引數、返回位址及臨時變數,而且往棧裡壓入資料和彈出資料都需要時間。

1、 斐波那契數列 0,1,1,2,3,5,8,13 …

//遞迴      缺陷:重複計算的太多

int fib(int n)

//迴圈

int fib(int n)

return fibsum;

}//尾遞迴:當遞迴呼叫是整個函式體中最後執行的語句且它的返回值不屬於表示式的一部分時,覆蓋當前的活動記錄而不是在棧中去建立乙個新的

int fib(int n,int a,int b)

2、數值的整數次方

double power(double

base,int exponent)

if(flag)

return s;

else

return

1/s;

}//**改善 在上面的**中可以看到,如果指數是32,則在while迴圈內部需要進行31次乘法。可以再16次的基礎上再乘以一次就可以了,即使用公式

//a^n=a^(n/2)*a^(n/2) 偶數

//a^n=a^(n-1/2)*a^(n-1/2)*a 奇數

int power(double

base,int exponent)

3、順時針列印矩陣

// 1  2  3  4

// 5 6 7 8

// 9 10 11 12

//13 14 15 16

//將上述4*4的陣列按順時針列印:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10

void printbyclock(int (*a)[4], int rows, int columns)

}

《劍指offer》 遞迴和迴圈

記錄一下牛客網上,劍指 offer 分割槽的考點為 遞迴和迴圈 的題,都很簡單,共 4 題 1 斐波那契數列 2 跳台階 3 跳台階 4 矩形覆蓋 1 斐波那契數列 int fibonacci int n return b 遞迴方式 很容易想到 但是ac不了,因為遞迴次數過多,棧溢位了 int fi...

劍指offer 遞迴和迴圈

問題描述 大家都知道斐波那契數列,現在要求輸入乙個整數 n,請你輸出斐波那契數列的第 n 項 從 0 開始,第 0 項為 0 n 39 方法一 function fibonacci n var arr 0,1 for var i 2 i n i return arr n 方法二 function f...

劍指offer 迴圈遞迴

class solution return res 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法。class solution return res 乙隻青蛙一次可以跳上1級台階,也可以跳上2級 它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法...