当函数作为参数调用时,为什么此C程序表现异常

时间:2018-05-26 11:54:18

标签: c recursion

我创建了一个程序来计算数字的力量。 请查看工作代码:

    #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;
    }

只要我不将最后一个陈述替换为评论中提到的陈述,该程序就可以正常工作。

你能告诉我这种异常行为背后的原因吗?

1 个答案:

答案 0 :(得分:1)

  

只要我不替换最后一条语句,该程序就可以正常工作   和评论中提到的那个。

     

请让我知道这种异常的原因   行为?

这不是异常行为。

power(power(num,n/2),2)

这是一个递归调用,由于n == 2永远不会达到基本情况,因此n % 2 == 0的else if子句将始终被执行。