演算法提高 遞迴 快速冪

2021-09-12 18:55:00 字數 943 閱讀 3680

理解遞迴的想法不難,關鍵是如何 快速 寫出 正確 高效 的遞迴。

函式遞迴呼叫的基本形式:

type myfunction()
下面以遞迴實現 快速冪 ,說明一下寫遞迴的一些注意點,這些要點是不是必要的我不知道,我想這需要嚴格的證明。

一般求冪的方法是呼叫中的pow()函式,例如求

如果要造輪子的話,一種想法是用for迴圈:

#include #include using namespace std;

int forpower(int x, int n)

return y;

}int main()

當然,forpower(2,6) = 2 * 2 * 2 * 2 * 2 * 2,執行了五次乘法。即forpower(x, n)的時間複雜度大約是o(n)。可不可以更快呢?

比如對於

#include #include using namespace std;

long long power(int x, int n) elseelse }}

int main()

對於power(2,7),圖示描述其運算流程:

因此,個人的看法是,要寫好遞迴,三個東西很重要:

1.向內層的遞迴y = power(x, n/2);

2.向外層的返回return n % 2 == 0 ? y * y : y * y * x;

3.邊界層的返回return x;

其實很像數學歸納法。

個人淺見,歡迎批評指正!

演算法提高快速冪(快速冪演算法詳解)

問題描述 給定a,b,p,求 a b mod p。輸入格式 輸入共一行。第一行有三個數,n,m,p。輸出格式 輸出共一行,表示所求。樣例輸入 2 5 3 樣例輸出 資料規模和約定 共10組資料 對100 的資料,a,b為long long範圍內的非負整數,p為int內的非負整數。所謂的快速冪,實際上...

演算法提高 快速冪

快速冪講解 問題描述 給定a,b,p,求 a b mod p。輸入格式 輸入共一行。第一行有三個數,n,m,p。輸出格式 輸出共一行,表示所求。樣例輸入 2 5 3 樣例輸出 2資料規模和約定 共10組資料 對100 的資料,a,b為long long範圍內的非負整數,p為int內的非負整數。inc...

演算法提高 快速冪

演算法提高 快速冪 時間限制 1.0s 記憶體限制 256.0mb 問題描述 給定a,b,p,求 a b mod p。輸入格式 輸入共一行。第一行有三個數,n,m,p。輸出格式 輸出共一行,表示所求。樣例輸入 2 5 3 樣例輸出 2 資料規模和約定 共10組資料 對100 的資料,a,b為long...