求帮忙分析一下这个f1和f2的值谢谢
#include<stdio.h>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;
}
}
main()
{
int x;
fun(8,&x);
printf("%d\n",x);
}
谁在啊!!!!居然没回复!!!! #include<stdio.h>
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;
}
return *s;
}
main()
{
int x,i;
i=fun(8,&x);
printf("%d\n",i);
}
把你的程序小改了一下;也不知道改得对不对;
f1 和f2 的值,是用递归求出来的, 看不懂,你这是在求fibonacci数列吗?我刚学到指针,还看不懂
不过你的函数好像没有返回值啊?为毛是个int?
我写了一个,但是觉得fun(x , &y);这个地址感觉没用啊,多此一举。
#include<stdio.h>
int fun(int a,int*b);
void main()
{
int m=0,n=0;
int *x=&m;
puts("请输入要求的第几个数列");
scanf("%d",&n);
m=fun(n,&x);
printf("结果为 %d",*x);
}
int fun(int a,int*b)
{
if(a==1||a==2) return 1;
int i=fun(a-1,&b)+fun(a-2,&b);
int* num=&i;
return *num;
} 如果你想返回的是一个指针,就应该int*fun (int a);吧
我写了一个返回指针的,感觉这玩意真难。
给我指正一下:
#include<stdio.h>
int i=0; //全局变量,许多指针都指向这个变量。
int fun2(int a) //真正运算fibonacci数列的函数
{
if(a==1||a==2) return 1;
return fun2(a-1)+fun2(a-2);
}
int* fun(int a) //返回指针的函数
{
int* num=&i;
i=fun2(a);
return num;
}
void main()
{
int n;
int *x;
puts("请输入要求的第几个数列");
scanf("%d",&n);
x=fun(n); //经过两次指向,x还是指向i的
printf("结果为 %d",*x);
}
haiouda 发表于 2015-3-12 22:09
把你的程序小改了一下;也不知道改得对不对;
f1 和f2 的值,是用递归求出来的,
这样输出了斐波那契数列。我想要最后返回的值!为什么会是21 !!!! 秀丽江山 发表于 2015-3-12 22:51
看不懂,你这是在求fibonacci数列吗?我刚学到指针,还看不懂
不过你的函数好像没有返回值啊?为毛是个int ...
想分析f1 和f2值的切换 以及递增啊!!!! int fun(int n,int *s)是将fibonacci数列的第n项填入*s中,
if(n==1 || n==2)
*s =1;
这个是递归的结束条件
fun(n-1,&f1);
fun(n-2,&f2);
*s=f1+f2
这个是递归的一般情况。
顺便说下,课堂上分析循环或者递归的执行过程,仅仅是出于好奇心验证这种编程方式的正确性,绝对不是叫你每次遇到循环或递归都要做这种分析。事实上,你可以看看之前循环或递归的编程方式,从中得到“不变式”(对于循环)和“递归方程”(对于递归),剩下的就是毫无创造性编写代码了。
如果上面有什么名词看不懂,可以baidu 庚午 发表于 2015-3-13 20:00
想分析f1 和f2值的切换 以及递增啊!!!!
可以在VC6.0里,一步一步地执行,这样就可以看到,全部过程了 haiouda 发表于 2015-3-14 12:29
可以在VC6.0里,一步一步地执行,这样就可以看到,全部过程了
做过单步调试,才混乱了! 能简单的解释一下不!! 本帖最后由 haiouda 于 2015-3-15 13:45 编辑
庚午 发表于 2015-3-14 18:43
做过单步调试,才混乱了! 能简单的解释一下不!!
上面的太复杂,你弄个简单的;比如把 f2去掉(没试下面的程序有没有错误,你试着去掉f2),再一步一步调试,理解了f1的变化,上面的就好弄懂了;
#include<stdio.h>
int fun(int n,int *s)
{
int f1;
if(n==1 || n==2)
*s =1;
else
{
fun(n-1,&f1);
*s=f1+0;
}
return *s;
}
main()
{
int x,i;
i=fun(8,&x);
printf("%d\n",i);
}
页:
[1]