我创建了一个程序来计算数字的力量。 请查看工作代码:
#include <stdio.h>
#include <stdlib.h>
int power(int,int);
int main()
{
int num,n;
scanf("%d %d",&num,&n);
printf("power of %d to %d\n",num,n);
printf("%d",power(num,n));
return 0;
}
int power(int num,int n)
{
int result=0;
if(n==0)
return 1;
if(n==1)
return num;
if(n%2!=0)
{
result=num*power(num,n-1);
}
else if(n%2==0)
{
result=power(num,n/2)*power(num,n/2);
//why this hangs when i replace this statement with power(power(num,n/2),2)
}
return result;
}
只要我不将最后一个陈述替换为评论中提到的陈述,该程序就可以正常工作。
你能告诉我这种异常行为背后的原因吗?
答案 0 :(得分:1)
只要我不替换最后一条语句,该程序就可以正常工作 和评论中提到的那个。
请让我知道这种异常的原因 行为?
这不是异常行为。
power(power(num,n/2),2)
这是一个递归调用,由于n == 2
永远不会达到基本情况,因此n % 2 == 0
的else if子句将始终被执行。