演算法學習 快速冪1 遞迴實現

2022-06-29 12:27:09 字數 484 閱讀 4470

對於a^n,如果連續乘 n 個 a ,消耗太多時間,而快速冪相對快了很多,這裡介紹遞迴二分思想的快速冪

對於an次,可以先計算x=a(n/2),再通過x * x計算an。對於a(n/2),可以先計算x=a^(n/4),再通過x * x計算a(n/2)……一次類推到n=1……如果遇到n是奇數,可以拆成x=a((n-1)/2),再通過x * x * 2計算a^n,下面用遞迴實現。

void fastq(int a,int n)//a是底數,n是指數

int x=fastq(a,n/2);

if(flag==1) return x*x*2;

else return x*x;

}

還可以進一步壓縮

void fastq(int a,int n)

雖然,,挺簡單的,但快速冪折磨了我很久,沒錯,就是麥森數。本應該是道比較簡單的題,結果浪費我很多時間。

演算法學習(二) 快速冪

快速冪是用來解決 首先,了解乙個模運算的概念 a b mod n a mod n b mod n mod n a b mod n a mod n b mod n mod n 然後,對於乙個數k,把它轉換為二進位制,如11 1011 那麼於是 那麼在迴圈過程中只需要一直記錄 typedef long ...

演算法學習1 遞迴

遞迴 乙個函式呼叫其自身。不同名字空間上的迴圈。注意 使用遞迴策略時,必須有乙個明確的遞迴結束條件,否則遞迴將會無限進行下去。參考 中國大學mooc 演算法基礎 話歪之地的部落格 int factorial int n else 執行f 3 2 f 3 5 f 2 2 f 2 5 f 1 2 f 1...

演算法學習 遞迴1

遞迴演算法是把問題轉化為規模縮小了的同類問題的子問題。然後遞迴呼叫函式 或過程 來表示問題的解。一般來說 能夠用到遞迴解決的問題應該滿足以下三個條件 1 待解決的問題可以轉化為乙個或多個子問題來求解,而這些子問題的求解方法與原問題相同,只是在數量規模上會有所不同 2 遞迴呼叫的次數必須是有限的 3 ...