递归程序出现奇怪的问题了,求大神解答。
下面这个程序计算x的n次方的值,x和n都限制为正整数。大家看有注释的报错的那一行,为什么要修改成return power(x, n / 2) * power(x, n / 2)才不报错呢?谢谢高手热情指导!
//对于x^n,如果n是偶数,利用公式x^n = (x^n/2)^2
//若果n是奇数,则x^n = x * x^n-1
//这个程序使用了递归
#include <stdio.h>
#include <stdlib.h>
int power(int x, int n);
int main()
{
int x, n;
printf("Enter x and n: ");
scanf("%d%d", &x, &n);
printf("The value is %d", power(x, n));
return 0;
}
int power(int x, int n){
if (n == 0)
return 1;
else if (n != 0 && n %2 == 0)
return power(power(x, n / 2), 2);//这一行报错
else
return x * power(x, n - 1);
}