佛教心咒大全:C高手进。帮我分析一道题。

来源:百度文库 编辑:中科新闻网 时间:2024/05/11 03:39:07
#include<stdio.h>
int power(int,int);
void main()
{
int x,n;
scanf("%d%d",&x,&n);
printf("%d的%d次幂=%d",x,n,power(x,n));//第7行

}
int p;
if(n>0)p=power(x,n-1)*x;//第13行
else p=1;
return(p);
函数的递归调用问题,很难理解,特别是第13行,不明白是怎么运算。
power(x,n-1)*x怎么计算的?

 
 
 
不管是不是递归调用,分析函数调用的最佳方法是代替法。
具体来说,就是用函数体代替函数的调用。

首先必须去掉函数体里的多余脂肪。
把 power( ) 里的 p 去掉:
 
 
int power( int x, int n ) {

    if( n > 0 )
        return power( x, n - 1 ) * x;
    else
        return 1;
}
 
 
如果 n 大于 0,power( x, n ) 将被 power( x, n - 1 ) * x 代替,
否则将被 1 代替。

分析时用小的参数值就可以了。 考虑 power( 2, 3 ):

power( 2, 3 )
==> power( 2, 3 - 1 ) * 2
==> power( 2,     2 ) * 2
==> power( 2, 2 - 1 ) * 2 * 2
==> power( 2,     1 ) * 2 * 2
==> power( 2, 1 - 1 ) * 2 * 2 * 2
==> power( 2,     0 ) * 2 * 2 * 2
==> 1                 * 2 * 2 * 2
==> 8
 
 
 

你最好手动计算一下过程,就明白了
递归用的数据结构是栈

#include<stdio.h>
int power(int,int);
void main()
{
int x,n;
scanf("%d%d",&x,&n);
printf("%d的%d次幂=%d",x,n,power(x,n));//第7行

}

int power(int x, int n)
{
int p;
if(n>0)
p=power(x,n-1)*x; //第13行
else p=1;
return(p);
}

假设x=2,n=3
第一次调用power(2,3)
第二次调用power(2,2)
……直到n==0为止。

wsddsdsdsw