筆試面試題之Fibonacci數列

2021-06-17 00:14:53 字數 1282 閱讀 5867

跳台階問題。

乙個台階總共有n 級,如果一次可以跳1 級,也可以跳2 級。

求總共有多少總跳法,並分析演算法的時間複雜度。

我們把n級台階時的跳法看成是n的函式,記為f(n)。當n>2時,第一次跳的時候就有兩種不同的選擇:一是第一次只跳1級,此時跳法數目等於後面剩下的n-1級台階的跳法數目,即為f(n-1);另外一種選擇是第一次跳2級,此時跳法數目等於後面剩下的n-2級台階的跳法數目,即為f(n-2)。因此n級台階時的不同跳法的總數f(n)=f(n-1)+(f-2)。

long long fibonacci_solution1(unsigned int n)  

; if(n < 2)

return result[n];

return fibonacci_solution1(n - 1) + fibonacci_solution1(n - 2);

}

/*

下面介紹一種時間複雜度是o(logn)的方法:

對於斐波那契數列1,1,2,3,5,8,13…….有如下定義:

f( n ) = f( n-1 ) + f( n-2 )

f( 1 ) = 1

f( 2 ) = 1

矩陣形式:

[ f( n+1 ) , f( n ) ] = [ f( n ) , f( n-1 ) ] * q 其中 [ f( n+1 ) , f( n ) ]為行向量,q = 為矩陣,則 [ f( n+1 ) , f( n ) ]=[ 1 , 0 ] * qn , */

struct matrix

}; matrix matrixmultiply ( const matrix & m1, const matrix & m2 )

matrix matrixpower( unsigned int n )

else if(n % 2 == 0)

else if( n % 2 == 1 )

return m;

} long long fibonacci( unsigned int n )

; if( n < 2 )

return result[ n ];

matrix q = matrixpower( n - 1 );  //注意:按定義式應該用[ 1, 0 ]*q, 或者等價於*q, 但是因為顯然結果相同,所以略去這一步。

return q.m_00;

}

筆試面試題之遞迴

1.字串的全排列。全排列就是從第乙個數起每個數分別與它後面的數交換。遞迴實現 從集合中依次選出每乙個元素,作為排列的第乙個元素,然後對剩餘的元素進行全排列,如此遞迴處理,從而得到所有元素的全排列。以對字串abc進行全排列為例,我們可以這麼做 以abc為例 固定a,求後面bc的排列 abc,acb,求...

筆試面試題

1 昨天參加一公司筆試,給幾道演算法題整懵了,其實也不難,但好久沒有碰演算法,只是有思路,要讓我在這麼短的時間內寫出程式來還是不行。2 這裡將其中一道稍微複雜一點的演算法題寫下來,以此小結。3 4 題目描述 5 將n個雞蛋放入到m個籃子中去 n m 保證每個籃子中至少乙個雞蛋,然後指定乙個數x,要求...

面試題 筆試

題1 有如下資料庫表tab 請用乙個 delete 語句,刪除 value 重複的行,每個 value 只保留 id 最小的一行。delete from tab where id notin select from select min id from tab groupby value a 好像有...