有以下程序       #include  <stdio.h> void  fun(int  n, int *p) {  int  f1,t2;    if(n==1 ||n==2) *p=1;    else    {   fun(n-1,&f1);  

admin2009-06-20  25

问题 有以下程序       #include  <stdio.h> void  fun(int  n, int *p) {  int  f1,t2;    if(n==1 ||n==2) *p=1;    else    {   fun(n-1,&f1);   fun(n-2,&f2);        *p=f1+f2;    } } main() {  int  s;    fun(3,&s);   printf("%d\n", s ); }

选项 A、2
B、3
C、4
D、5

答案A

解析 在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。本题中的fun()函数直接调用了自身,所以它是一个递归函数。fun()函数中,当形参n为1或2时,让形参p所指内容为1。从这里可以看出形参p的用途是输出一个整数,所以我们不妨记作fun(1)=1、 fun(2)=1。如果是其他情况,那么输出结果*p的内容为f(n)=f(n-1)+f(n-2)。由此可见, fun()函数的作用是求斐波纳契数列第n项的值(斐波纳契数列第1和2项的值为1,以后各项分别为前两项之和:1、1、2、3、5、8、13……)。主函数中通过fun()函数,求第3项值;所以输出结果为2,故应该选择A。
转载请注明原文地址:https://jikaoti.com/ti/a5I0FFFM
0

最新回复(0)