| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1780 人关注过本帖
标题:一个简单的递归,最后有点看不懂。斐波那契数列.
只看楼主 加入收藏
ZZlove
Rank: 2
等 级:论坛游民
帖 子:29
专家分:28
注 册:2010-3-7
结帖率:25%
收藏
已结贴  问题点数:20 回复次数:12 
一个简单的递归,最后有点看不懂。斐波那契数列.
#include"stdio.h"
int fn(int a);
void main()
{
     int sum,n;
     scanf("%d",&n);
     sum=fn(n);
     printf("%d",sum);
     }
     int fn(int a)
     {
     if(a<=2&&a>0)
     {
                  return 1;
                  }
                  else if(a>2)
                  {a=fn(a-1)+fn(a-2);      为什么是 a=fn(a-1)+fn(a-2);不是应该是fn(a)=fn(a-1)+fn(a-2)么?
                  return a;}              
                  }
搜索更多相关主题的帖子: 递归 
2010-05-28 13:18
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:2 
fn(a)=fn(a-1)+fn(a-2) 只是一个公式,具体看你怎么用代码去实现了~~
耐心点~一步一步地看代码怎么样用递归完成如此的递推公式。
2010-05-28 13:29
myhnuhai
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:3
帖 子:425
专家分:1725
注 册:2010-3-17
收藏
得分:2 
这道题的具体思路就是,第一项和第二项的值给出来了,有个规律就是前两项的和等于第三项!顺着这个思路解就行了!

不要让肮脏的记忆,迷失了原本纯洁的心灵!
2010-05-28 13:50
ZZlove
Rank: 2
等 级:论坛游民
帖 子:29
专家分:28
注 册:2010-3-7
收藏
得分:0 
嗯,知道了,a=fn(a-1)+fn(a-2); 等号前的a可以自己随便定义个别个字符对吗?我试了试编译通过了。。。。
但我把代码改了改,想求斐波那契数列.的前n项的和,加了几行,但求出来的却只是fn(n-1)和fn(n)的和,请帮忙。
#include"stdio.h"
int fn(int a);
void main()
{
     int sum,n,i,m;
     scanf("%d",&n);
     sum=fn(n);
     printf("%d\n",sum);
     for(i=1;i<=n;i++)      // 就加了这四行。              
     m=0;
     m+=fn(i);
     printf("%d",m);        //
     getch();
     }
     int fn(int a)
     {
     if(a<=2&&a>0)
     {
                  return 1;
                  }
                  else if(a>2)
                  {a=fn(a-1)+fn(a-2);
                  return a;}
                  }
2010-05-28 13:53
ZZlove
Rank: 2
等 级:论坛游民
帖 子:29
专家分:28
注 册:2010-3-7
收藏
得分:0 
回复 2楼 lijm1989
嗯,知道了,a=fn(a-1)+fn(a-2); 等号前的a可以自己随便定义个别个字符对吗?我试了试编译通过了。。。。
但我把代码改了改,想求斐波那契数列.的前n项的和,加了几行,但求出来的却只是fn(n-1)和fn(n)的和,请帮忙。
#include"stdio.h"
int fn(int a);
void main()
{
     int sum,n,i,m;
     scanf("%d",&n);
     sum=fn(n);
     printf("%d\n",sum);
     for(i=1;i<=n;i++)      // 就加了这四行。              
     m=0;
     m+=fn(i);
     printf("%d",m);        //
     getch();
     }
     int fn(int a)
     {
     if(a<=2&&a>0)
     {
                  return 1;
                  }
                  else if(a>2)
                  {a=fn(a-1)+fn(a-2);
                  return a;}
                  }
2010-05-28 14:00
ZZlove
Rank: 2
等 级:论坛游民
帖 子:29
专家分:28
注 册:2010-3-7
收藏
得分:0 
回复 3楼 myhnuhai
那求这个数列的和该怎么做?
2010-05-28 14:00
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:10 
程序代码:
#include"stdio.h"
int fn(int a);
void main()
{
     int sum,n,i,m;
     scanf("%d",&n);
     sum=fn(n);
     printf("%d\n",sum);
     m=0;
     for(i=1;i<=n;i++)      // 就加了这四行。             
     {
        m+=fn(i);   //------注意括号(虽然这里不用也可以,想一下循环主体的位置在哪)-------还有m = 0 的位置
     }
     printf("%d",m);        //
     getch();
     }
     int fn(int a)
     {
     if(a<=2&&a>0)
     {
                  return 1;
                  }
                  else if(a>2)
                  {a=fn(a-1)+fn(a-2);
                  return a;}
                  }
2010-05-28 20:18
ZZlove
Rank: 2
等 级:论坛游民
帖 子:29
专家分:28
注 册:2010-3-7
收藏
得分:0 
回复 7楼 lijm1989
可以给我解释一下 for(i=1;i<=n;i++)和m=0;
                              m=0;                 for(i=1;i<=n;i++);            
                             m+=fn(i);             m+=fn(i);
的区别吗?特别是第一个凡for语句是怎么执行的?
2010-05-30 10:57
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
for(i=1;i<=n;i++)
    m=0;         
    m+=fn(i);
这样的话,循环体就是 m = 0; 循环n次后执行 m+=fn(i);

  m = 0;
  for(i=1;i<=n;i++);           
     m+=fn(i);
这样的话,就是先将 m 清零,然后就执行for循环,循环体为  m+=fn(i);

要注意的就是,像 while for 这些,循环体都是紧接着的大括号里面的语句,如果没有大括号的话,就是紧接着的第一个语句(分号结束);
像你写的就变成 m =0 是循环体了,肯定不是你想要的效果。
2010-05-30 12:59
zhuxu0423
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:59
专家分:101
注 册:2010-4-12
收藏
得分:3 
斐波那契数列的定义为:f(n)=f(n-2)+f(n-1)(n>1) 其中f(0)=0, f(1)=1

#include<stdio.h>
long func(long n)
{
if(n==0||n==1)return n;
else return func(n-1)+func(n-2);
}
main()
{
long n;
printf("please input n:");
scanf("%ld",&n);
printf("the result is %ld",func(n));
}
2010-05-30 13:50
快速回复:一个简单的递归,最后有点看不懂。斐波那契数列.
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041068 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved