鱼C论坛

 找回密码
 立即注册
查看: 1947|回复: 10

求帮忙分析一下这个f1和f2的值谢谢

[复制链接]
发表于 2015-3-11 22:56:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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;
}
}
main()
{
int x;
fun(8,&x);
printf("%d\n",x);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-3-12 20:39:39 | 显示全部楼层
谁在啊!!!!居然没回复!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-12 22:09:05 | 显示全部楼层
#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 的值,是用递归求出来的,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-12 22:51:49 | 显示全部楼层
看不懂,你这是在求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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-12 23:11:23 | 显示全部楼层
如果你想返回的是一个指针,就应该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);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-13 19:59:56 | 显示全部楼层
haiouda 发表于 2015-3-12 22:09
把你的程序小改了一下;也不知道改得对不对;
f1 和f2 的值,是用递归求出来的,

这样输出了斐波那契数列。我想要最后返回的值!为什么会是21 !!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-13 20:00:34 | 显示全部楼层
秀丽江山 发表于 2015-3-12 22:51
看不懂,你这是在求fibonacci数列吗?我刚学到指针,还看不懂
不过你的函数好像没有返回值啊?为毛是个int ...

想分析f1 和f2值的切换 以及递增啊!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-14 11:07:11 | 显示全部楼层
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-14 12:29:40 | 显示全部楼层
庚午 发表于 2015-3-13 20:00
想分析f1 和f2值的切换 以及递增啊!!!!

可以在VC6.0里,一步一步地执行,这样就可以看到,全部过程了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-14 18:43:41 | 显示全部楼层
haiouda 发表于 2015-3-14 12:29
可以在VC6.0里,一步一步地执行,这样就可以看到,全部过程了

做过单步调试,才混乱了! 能简单的解释一下不!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-15 13:43:20 | 显示全部楼层
本帖最后由 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);
 }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 13:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表