为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
qq_企鹅_13 2017-09-13 22:09:55
#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;大神破解,谢谢!
查看完整描述

1 回答

?
xhm_hm

TA贡献2条经验 获得超0个赞

我的理解如下:(如有错误请谅解,并告知)

一层执行到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;


查看完整回答
反对 回复 2017-09-14
  • qq_企鹅_13
    qq_企鹅_13
    不懂!请问这是什么运算方法
  • 慕九州5019927
    慕九州5019927
    易知fun函数从main函数接收6和&x,将6代入运行得: fun(6,&x)=fun(5,&f1);fun(4,&f2),*s1=f1+f2 因为&x=*s=f1+f2且f1和f2未知,所以得 fun(5,&f1)=fun(4,&f1);fun(3,&f2),*s2=f1+f2 同理: fun(4,&f1)=fun(3,&f1);fun(2,&f2),*s3=f1+f2 fun(3,&f1)=fun(2,&f1);fun(1,&f2),*s4=f1+f2 因为n==1或者2,得出1,得: fun3的&f1=*s4=2 fun4的&f1=*s3=3 fun5的&f1=*s2=5 fun6的&x=*s1=8 最后输出x的值,为8 (本回复用一般数学理念和计算机思维加以整合,目的为了一些编程新手迈入编程门槛,望一些语言大牛理解!)
  • 1 回答
  • 0 关注
  • 1062 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信