Следующий код для расчета (base ^ pow)% mod
Может ли кто-нибудь объяснить мне следующий код, который включает в себя объявление переменной функции, я хочу знать значение, которое функция присваивает переменной и как она это делает.
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;
}
Функция будет выполнена с заданными параметрами, затем return()
обработанное значение. Это значение будет затем присвоено var
,
int tmp = mypow( base, pow >> 1, mod );
Эта строка является частью рекурсивной реализации функции.
int tmp = mypow( base, pow >> 1, mod );
Это определяет переменную с именем tmp
и инициализирует его значением, возвращаемым вызовом функции mypow( base, pow >> 1, mod )
,
Это не называется объявлением переменной функции, возможно, аргументы передаются функции.
Поэтому, когда вы пытаетесь вызвать функцию как mypow(25,20,22)
эти три фактических аргумента передаются вызываемому в качестве формальных аргументов. В C
Вы всегда вызываете ссылочный метод при передаче аргументов.