一个c预言的题目、求这个程序的输出结果、麻烦说一下过程、谢谢了.#include fun (int x){ int p; if(x==0||x==1) return(3); p=x-fun(x-2); return p;}main( ){printf ("%d\n",fun(9));}

来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/25 09:34:13
一个c预言的题目、求这个程序的输出结果、麻烦说一下过程、谢谢了.#includefun(intx){intp;if(x==0||x==1)return(3);p=x-fun(x-2);returnp;

一个c预言的题目、求这个程序的输出结果、麻烦说一下过程、谢谢了.#include fun (int x){ int p; if(x==0||x==1) return(3); p=x-fun(x-2); return p;}main( ){printf ("%d\n",fun(9));}
一个c预言的题目、求这个程序的输出结果、麻烦说一下过程、谢谢了.
#include fun (int x){ int p; if(x==0||x==1) return(3); p=x-fun(x-2); return p;}
main( ){printf ("%d\n",fun(9));}

一个c预言的题目、求这个程序的输出结果、麻烦说一下过程、谢谢了.#include fun (int x){ int p; if(x==0||x==1) return(3); p=x-fun(x-2); return p;}main( ){printf ("%d\n",fun(9));}
递归函数调用.用数学表达就是:
已知 fun(x) = x - fun(x-2),且fun(0)=3,fun(1)=3,求fun(9)的值.
fun(9)=9- fun(7) //计算到这里,要先等待fun(7)的计算结果才能继续往下计算
=9- (7- fun(5)) //而到了这一步,则要等待fun(5)返回计算结果才能继续运算
=9- (7- (5- fun(3))) //同理,等待fun(3)返回计算结果
=9- (7- (5- (3- fun(1)))) //遇到了fun(0)或fun(1),此时不用再递归了,逐层向主调函数返回计算结果
=9- (7- (5- (3- 3))))
=7
在fun(x)函数中,当执行到p=x-fun(x-2)时,当前fun(x)函数会挂起(入栈),等待fun(x-2)返回计算结果.而在fun(x-2)函数执行过程中又会被挂起(入栈),等待fun(x-4)函数返回结果,...,如此往复,直到遇见fun(0)或fun(1).