猿问

请问怎么运算的?请把步骤写一下!

#include"stdio.h"
#include"string.h"
#include"conio.h"
#include"windows.h"

int fun( int n, int *s );
main()
{
 int x;

 fun( 6 ,&x );

 printf("%d \n",x);
}

int fun( int n, int *s )
{
 int f1,f2;

 if ( n == 1 || n == 2 )
 {
  *s = 1;
 }
 else
 {
  fun ( n-1,&f1);
  fun ( n-2,&f2);
  *s=f1+f2;
 }
}

运行结果为8;

大神破解,谢谢!

qq_企鹅_13
浏览 1063回答 1
1回答

xhm_hm

我的理解如下:(如有错误请谅解,并告知)一层执行到fun(6-1,&f1);停止,执行二层fun(6-1,&f1),也就是fun(5,&f1)。二层执行到fun(5-1,&f1);停止,执行三层fun(4,&f1);三层执行到fun(4-1,&f1);停止,执行四层fun(3,&f1);四层执行到fun(3-1,&f1);停止,执行五层fun(2,&f1);五层执行到if(n==1||n==2) f1=1;返回到四层fun(3-1,&f1)的位置;四层执行fun(3-2,&f2),返回f2=1;执行*s=f1+f2;s=2,即f1=2返回到第三层fun(4-1,&f1)的位置;三层执行fun(4-2,&f2),返回f2=1;执行*s=f1+f2;s=3,即f1=3返回到第二层fun(5-1,&f1)的位置;二层执行fun(5-2,&f2),执行fun(3-1,&f1),返回f1=1,执行fun(3-2,&f2)返回f2=1;执行*s=f1+f2;s=2,即返回f2=2,执行*s=f1+f2;s=5,即f1=5返回到第一层fun(6-1,&f1)的位置;一层执行fun(6-2,&f2),执行fun(4-1,&f1),执行fun(3-1,&f1),返回f1=1;执行fun(3-2,&f2),返回f2=1,执行*s=f1+f2;s=2;返回f1=2;执行fun(4-2,&f2),返回f2=1;再执行fun(4-2,&f2)后的*s=f1+f2;s=3;即返回f2=3;最后执行fun(6-2,&f2)后的*s=f1+f2;s=8;
随时随地看视频慕课网APP
我要回答