#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
- 提问者网友:先森请一心
- 2021-02-07 03:32
#include<stdio.h> int fun(int n,int *s){int f1,f2;if(n==1IIn==2)*s=1;else{fun(n-1,&f1);fun
最佳答案
- 二级知识专家网友:没感情的陌生人
- 2021-02-07 04:48
这个函数是使用递归算法计算斐波纳契数列的,那个数列是这样的:
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;
}
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;
}
全部回答
- 1楼网友:請叫我丶偏執狂
- 2021-02-07 05:21
关键是对这个递归函数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,然后就可以算出来了
如果不懂,建议看看递归函数那里的相关知识
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯