这是普通递归的升级版,比普通的更高效。
利用指数的奇偶来乘,比如2^6 =(23)2;
下面是一张流程表
函数最终是返回当前函数体的值,返回完之后会继续执行下面的语句,直到执行本次函数之后才会返回上层函数
#include <stdio.h>
double calc_pow(double x, int n);
int main()
{
double x;
int n;
scanf("%lf %d", &x, &n);
printf("%.0f\n", calc_pow(x, n));
return 0;
}
int i=1;
double calc_pow(double x, int n)
{
printf("%f %d\n", x, n);
//if(n==1) return x; //如果用这个判断的话,会少一个,如果n是0就不可以了
if (n == 0)
return 1;
if (n % 2 == 0)
{
//printf("%f %d\n", x, n);
return calc_pow(x * x, n / 2);
}
else
{
//printf("%f %d\n", x, n);
return calc_pow(x * x, n / 2) * x; //记住函数最终是返回当前函数的值,返回完之后会继续执行下面的语句,直到执行本次函数之后才会返回上层函数
}
}