Python 簡單實例3:冪運算

問題:求x^n宏粤,為了簡化父腕,假設x和n都是大于等于0的整數(shù):

一般來說 如果直接使用遍歷的話役耕,需要運行n次,記為:時間復雜度O(n)堡纬,Python實現(xiàn)如下:

def power(x, n):
    if n == 0:
        return 1
    if n == 1:
        return x
    if x == 0:
        return 0
    res = 1
    for i in range(n):
        res = res * x
    return res
print(power(2, 10))

返回結果1024是正確的,為了方便觀察遍歷運算了幾次萨脑,我們把函數(shù)里添加一個計數(shù)的變量隐轩,每次遍歷讓他+1:

def power(x, n):
    k = 0 # 計算循環(huán)次數(shù)
    if n == 0:
        return 1
    if n == 1:
        return x
    if x == 0:
        return 0
    res = 1
    for i in range(n):
        res = res * x
        k = k + 1
    print(k)
    return res
power(2, 10)
power(2, 20)
power(2, 30)

運行后會依次輸出:10 20 30饺饭,符合時間復雜度是O(n)

現(xiàn)在來優(yōu)化一下這個算法:

根據(jù)中小學學到的數(shù)學知識渤早,我們可以了解到:

x^{a+b} = x ^a \cdot x^b

易得:

n為偶數(shù)時
x^n = (x^2)^{ \frac{n}{2}}
n為奇數(shù)時
x^n = (x^2)^{ \frac{n-1}{2}}\cdot x

轉(zhuǎn)化為Python,使用遞歸后 可以寫出以下內(nèi)容:

def power(x, n):
    print(x, n) # 為了方便觀察遞歸的次數(shù)和每次帶入的參數(shù)
    if n == 0:
        return 1
    if n == 1:
        return x
    if n % 2 == 1:
        return power(x * x, n//2) *x
    else:
        return power(x * x, n//2)
power(2,20)

輸出結果為:

2 20
4 10
16 5
256 2
65536 1

該算法的時間復雜度為O(2\log_2 n )

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瘫俊,一起剝皮案震驚了整個濱河市鹊杖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扛芽,老刑警劉巖骂蓖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異川尖,居然都是意外死亡登下,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門叮喳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來被芳,“玉大人,你說我怎么就攤上這事馍悟∨媳簦” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵锣咒,是天一觀的道長侵状。 經(jīng)常有香客問我,道長毅整,這世上最難降的妖魔是什么趣兄? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮悼嫉,結果婚禮上诽俯,老公的妹妹穿的比我還像新娘。我一直安慰自己承粤,他們只是感情好暴区,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著辛臊,像睡著了一般仙粱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上彻舰,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天伐割,我揣著相機與錄音候味,去河邊找鬼。 笑死隔心,一個胖子當著我的面吹牛白群,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播硬霍,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼帜慢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了唯卖?” 一聲冷哼從身側(cè)響起粱玲,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拜轨,沒想到半個月后抽减,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡橄碾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年卵沉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片法牲。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡史汗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出皆串,到底是詐尸還是另有隱情淹办,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布恶复,位于F島的核電站怜森,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏谤牡。R本人自食惡果不足惜副硅,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望翅萤。 院中可真熱鬧恐疲,春花似錦、人聲如沸套么。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胚泌。三九已至省咨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間玷室,已是汗流浹背零蓉。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工笤受, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人敌蜂。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓箩兽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親章喉。 傳聞我的和親對象是個殘疾皇子汗贫,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345