c语言计算机

来源:百度知道 编辑:UC知道 时间:2024/06/17 18:08:52
fun (int x)
{ int p;
if(x==0或x==1) return(3);
p=x-fun(x-2);
return p;
}
main()
{printf("%d\n",fun(7);)}执行后的输出结果 是多少
请详细说明一下每一步的作用,我是新手,谢谢

答案是2!

fun (int x)
{
int p;
if(x==0||x==1) return(3);
p=x-fun(x-2);
return p;
}
main()
{
printf("%d\n",fun(7));
}
如果是这样,输出为2.
fun (int x)
{
int p;
if(x==0||x==1) return(3);//递归出口
p=x-fun(x-2);//递归
return p;//函数执行结束
}

递归调用
fun (int x)
{ int p;
if(x==0||x==1) return(3);//没有或这个关键字,用||
p=x-fun(x-2);
return p;
}
main()
{printf("%d\n",fun(7);)}

主函数传递值7给fun函数,第一次调用
fun函数中x=7,if判断为假,进入第二次调用,传入值5给fun函数
第二次调用fun函数中x=5,注意重新调用fun函数内存分配的地址是不一样的,所以每次调用的x也互不影响,x=5时条件判断为假,进入第三次调用,传入值3给fun函数
第三次调用中fun函数中x=3,条件判断为假,继续调用fun函数,进入第四次调用传入值1给fun函数
第四次调用fun函数中x=1,条件判断为真,返回3给第三次调用,第三次调用时fun函数中x=3所以p=3-3,返回p=0给第二次调用,第二次调用中x=5,p=5-0,返回p=5给第一次调用,第一次调用x=7,p=7-5,返回p=2给主函数,输出2

结果是2;这是函数的递归调用;

7-fun(5);
7-5+fun(3);
7-5+3-fun(1)=7-5+3-3=2;