中易网

#include<stdio.h> int fun(int n,int *s){int f1,f2;if(n==1IIn==2)*s=1;else{fun(n-1,&f1);fun

答案:2  悬赏:60  
解决时间 2021-02-07 15:48
#include<stdio.h> int fun(int n,int *s){int f1,f2;if(n==1IIn==2)*s=1;else{fun(n-1,&f1);fun
最佳答案
这个函数是使用递归算法计算斐波纳契数列的,那个数列是这样的:
1,1,2,3,5,8,13,21。。。。。依此类推

大致解释如下,你看看吧,应该能看明白了吧。

#include
int fun(int n,int *s)
{
int f1,f2;
if(n==1 || n==2) // 如果是第一个或者第二个数,他们均为1
*s=1;
else
{
fun(n-1,&f1); // 递归计算前一个
fun(n-2,&f2); // 递归计算前两个位置的
*s=f1+f2; // 数列的定义就是当前位置是前两个数字之和
}
return 0;
}

int main()
{
int x;
fun(6,&x); // 看看数列第六个位置是不是8
printf("%d\n",x);
fun(8,&x);
printf("%d\n",x);// 看看数列第8个位置是不是21

return 0;
}
全部回答
关键是对这个递归函数fun的理解 fun求解费波那次数列(1,1,2,3,5,8,13......)第n个数的值 你这个函数写得不够简练,不好理解,看我这个吧 int fun(int n){ if(n<=2) return 1; return fun(n-1)+fun(n-2); } 求第n个的值,如果n=1或者n=2就返回1,否则返回第n-1个和第n-2个的和 这样函数递归的调用,最终求出结果. 比如: 调用fun(6) return fun(5)+fun(4); 即fun(6)=fun(5)+fun(4)=fun(4)+fun(3)+fun(3)+fun(2)=......直到fun(1),fun(2)出现,fun(1)=fun(2)=1,然后就可以算出来了 如果不懂,建议看看递归函数那里的相关知识
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
高唐县人民检察院派驻姜店检查室地址有知道的
在这个公司呆着真难受,不知道是走还是继续忍
碑林驾校明胜路报名联络点地址有知道的么?有
Assignments are,consequently,given added w
葫芦岛龙港区教师每年到年终都被学校强制捐款
郭垅在哪里啊,我有事要去这个地方
如图在一个棱长为5厘米的正方体上挖去一个长5
九江国旅文化宫门市地址有知道的么?有点事想
出马之前感觉害怕是怎么回事
同时看上了技嘉B150M D3H,微星B150M MORTAR
hennessy vsop是什么酒
如何变得阳光开朗一点
路通驾校报名处地址有知道的么?有点事想过去
求解:若 2m-4 与 3m-1 是同一个正数的平方根
求问:我家的狗一直哼哼的小声叫 而且会围着
推荐资讯
个体幼儿园办理校车需要哪些手续和价格?
我是青岛人,不是说工商银行是国内最大的银行
广东省小学毕业试卷2011梅州市(语文、数学和
富春居红木家具地址有知道的么?有点事想过去
如图,理解不了代换关系,这里的 t=x+1/x
骑自行车加速骑行一段时间腿软
鸿运饭店地址在哪,我要去那里办事
腾讯手机管家怎么连接到电脑不用数据线
聚宝街地址有知道的么?有点事想过去
北大荒绿色食品怎么样
赣湘农家木桶饭在哪里啊,我有事要去这个地方
身边有个小人 喜欢挑拨离间 笑着对别人说你坏
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?