2014-03-07 42 views
-5

下面的代碼是計算(基礎^ POW)%MOD解釋變量聲明爲函數用C

任何一個可以給我解釋一下下面的代碼,是指在聲明一個變量的函數,我想知道函數賦給變量的值以及它如何執行。

int tmp = mypow(base, pow >> 1, mod); 

整個代碼:

#include<stdio.h> 

int mypow(int base, int pow, int mod) 
{ 
    if(pow == 0) return 1; 
    if(pow % 2 == 0){ 
     int tmp = mypow(base, pow >> 1, mod); 
    printf("\n\n%d\n\n",tmp); 
     return tmp * tmp % mod; 
    } 
    else{ 
     return base * mypow(base, pow - 1, mod) % mod; 
    } 
} 

int main(){ 
    printf("\n\n%d\n\n", mypow(25,20,22)); 
    return 0; 
} 
+1

這與初始化一個正常的變量聲明。它與例如'int tmp = 5;',除了初始化表達式是一個函數調用。 –

+0

這是[這裏]描述的遞歸算法的實現(http://en.wikipedia.org/wiki/Exponentiation_by_squaring#Basic_method)。 –

回答

1
int tmp = mypow(base, pow >> 1, mod); 

這定義了一個名爲tmp變量,並將其初始化爲通過函數調用mypow(base, pow >> 1, mod)返回的值。

2

該函數將具有給定參數被執行,那麼它將return()經處理的值。然後該值將被分配到var

int tmp = mypow(base, pow >> 1, mod); 

此行是遞歸實現函數的一部分。

0

這不叫變量聲明功能也許參數傳遞給函數。

所以,當你嘗試調用一個函數爲mypow(25,20,22),這三個實際ARG遊戲傳遞給被呼叫者的正式參數。在C你老參考方法傳遞ARGS調用。