C语言中不解的题目,麻烦高手们帮帮忙。

来源:百度知道 编辑:UC知道 时间:2024/05/20 11:31:28
下述程序输出结果:
#include <stido.h>
int fun(int x)
{ int p;
if(x==0||x==1)
return 3;
else p=x-fun(x-2);
return p;}
void main()
{ printf("\n%d",fun(9));} 答案:7

fun(9)=9-fun(7)
fun(7)=7-fun(5)
fun(5)=5-fun(3)
fun(3)=3-fun(1)
fun(1)=3
往上推,得fun(9)=7

首先,在执行main是传了个参数9,所以在fun函数开始的时候x=9;然后做个判断x是不是为0或1;开始知道它不是(x=9);所以执行else语句,p=9-fun(7);fun又自调用x就为7了;如此下去等式就为:
p=9-fun(7)=9-(7-fun(5))=2+fun(5)=2+5-fun(3)=7-3+fun(1);到此时x=1;就执行if里面的语句,即fun(1)=3;然后把p值返回就可以了!

这是递归算法的一个代码,当fun的参数x等于0或等于1时结束递归调用.

1.fun(9),p = 9 - fun(7)
2.fun(7),p = 7 - fun(5)
3.fun(5),p = 5 - fun(3)
4.fun(3),p = 3 - fun(1) 也就是 p = 3 - 3 = 0
5.p = 5 - fun(3) = 5 - 0 = 5
6.p = 7 - fun(5) = 7 - 5 = 2
7.p = 9 - fun(7) = 9 - 2 = 7