看下下面的程序?

来源:百度知道 编辑:UC知道 时间:2024/06/14 12:40:22
执行完下列语句段后int f(intx) {return ((x>0)?x*f(x-1):2);}int i;i=f(f(1));请问i值为多少并分析该算法执行过程!

#include<stdio.h>
int f(int x) {
return ((x>0)?x*f(x-1):2);//if(x>0)return x*f(x-1);else return 2;
}

int main()
{
int i;
//f(0)=2;
//f(x)=x*f(x-1);(x>0)

//f(1)=1*f(0)=2;
//f(2)=2*f(1)=4;
//f(3)=3*f(2)=12;

i=f(1);//f(1)=2;
i=f(i);//f(2)=2*f(1)=4;

printf("%d",i);
}

int f(int x)
{
return ((x>0)?x*f(x-1):2);
}
int i;
i=f(f(1));
通过多次的递归调用
i=4
首先计算f(1)=2
再调用f(2)=4

i=4
int f(intx) {return ((x>0)?x*f(x-1):2);}
函数功能:
x>0返回x*f(x-1)否则返回2
则f(0)=2,f(1)=1*f(0)=2,f(2)=2*f(1)=4
则i=f(f(1))=f(2)=4

i=f(f(1))
先计算f(1)
f(1)=1*f(1-1)=f(0)
计算f(0)
f(0)=2
再计算f(2)
f(2)=2*f(2-1)=2*f(1)=2*2=4

都是对的啊

int f(int x)
{
return ((x>0)?x*f(x-1):2);//f(1)= 1*2=2;f(2)=2*f(1)=4;
}
int i;
i=f(f(1)); //i=f(2)=4;

i