QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1358|回复: 15

斐波纳契数列!!

[复制链接]
发表于 2004-11-18 22:37:07 | 显示全部楼层 |阅读模式
斐波纳契数列!!定义如下:第一个数和第二个数都为1,而后续的每一个数字是其前两个数字之和。我想知第40个数是多少
问题是:不用递归
long Fibonacci (int n)
{
  if(n>2)
   return Fibonacci (n-1)+Fibonacci (n-2);
  else
   return 1;
}
而用循环来表达!又是如何?
因为调用Fibonacci(40)时!每1级递归者会创建自已的变量!那么Fibonacci(40)就要创建好多个变量,内存堆积就~~~~
 楼主| 发表于 2004-11-18 22:48:20 | 显示全部楼层
00表示一个空位
000100020005001300340089.......
0000010003000800210055.......
用两个数组表示!An=A(n-2)+B(n-1)
                 An=A(n-1)+B(n-2)
回复

使用道具 举报

发表于 2004-11-18 22:50:51 | 显示全部楼层
你看是这意思么?  我没有测试,想着写的
[code:1]
long F(int n)
{
  if(n<=2) return 1;
  long m, m1=1, m2=1;
  for(int i=3; i<=n; i++){
     m = m1+ m2;
     m2 = m1;
     m1 = m;
  }
  return m;
}
[/code:1]
回复

使用道具 举报

发表于 2004-11-18 23:43:20 | 显示全部楼层
long F(int n)
{
  if(n<=2) return 1;
  long m, m1=1, m2=1;
  for(int i=3; i<=n; i++){
     m = m1+ m2;
     m2 = m1;
     m1 = m;
  }
  return m;
}
回复

使用道具 举报

 楼主| 发表于 2004-11-19 08:30:12 | 显示全部楼层
大哥们!我是这样的:
*************************************
前10位是这样的:
01.02.03.04.05.06.07.08.09.10 11
1  1  2 3  5 8 13 21 34.55.89
*************************************
#############################A
##########################89  B
#######################34   55
#####################13   21
##################5    8
################2   3
#############1   1

89=34+55
55=34+21
这样是两个三个形!
平放就是:
1  2  5  13  34  89
..1  3   8  21  55
下面是将上数放到两个数组里,空位用0表示!好在数组在没有初始化是各元素是0的.A[0], B[0]不要!
**************
A:00.01.02.03.04.05.06.07.08.09 数组
A:00.01.00.02.00.05.00.13.00.34.00.89数
B:00.00.01.00.03.00.08.00.21.00.55数

*************************************
#include <stdio.h>
#define SIZE 10
main (void)
{
  int size,e;
  int num;
  int i=3;
  int  a[SIZE/2];
  int  b[SIZE/2];
  printf("keymum:\n") ;
  scanf("%d",&size) ;
  for( a[1]=1, b[2]=1;i<size+2;i++)
     a= a[i-2]+ b[i-1];
  for( ;i<size+2;i++)
   {e= a;printf("%d",e);}
  return 0;
}
编译通过了!不过运行得不到想要的结果!请帮帮我!
回复

使用道具 举报

发表于 2004-11-19 15:12:22 | 显示全部楼层
在《数据结构》严蔚敏与吴伟民著pascal版里有将递归结构转化为非递归结构的方法。c语言版没有。
回复

使用道具 举报

 楼主| 发表于 2004-11-19 18:42:58 | 显示全部楼层
[quote:da4f064fe9="sagaeon"]在《数据结构》严蔚敏与吴伟民著pascal版里有将递归结构转化为非递归结构的方法。c语言版没有。[/quote]
我找找这本书看下!再同大家讨论下如何可发使C做得更好!!
回复

使用道具 举报

发表于 2004-11-19 19:15:12 | 显示全部楼层
虽然c版没有,但步骤是一样的。
回复

使用道具 举报

 楼主| 发表于 2004-11-21 14:38:32 | 显示全部楼层
多谢!版主
回复

使用道具 举报

 楼主| 发表于 2004-11-22 08:49:13 | 显示全部楼层
版主我找到了《数据结构》算法实现及解析,已经放到本网里了!!
回复

使用道具 举报

 楼主| 发表于 2004-11-23 12:36:07 | 显示全部楼层
#include <stdio.h>
int show (int);
int main (void)
{
int n,num;
printf("please:\n");
scanf("%d",&n);
num=show (n);
printf("num=%d",num);
return 0;
}

int show (int n)
{
int a[60]={1,1};
int i;
for (i=2;i<n;i++)
*(a+i)=*(a+i-2)+*(a+i-1);
return *(a+n-1);
}
成功了!!
回复

使用道具 举报

 楼主| 发表于 2004-11-23 14:16:43 | 显示全部楼层
在内存分配上还存在不太好的地方!帮帮我!!想用malloc()来但不知何做好
回复

使用道具 举报

 楼主| 发表于 2004-11-23 14:19:15 | 显示全部楼层
我想:
读取要取个数
存入数组(自动更)
在数组中提取数据
返回会值
回复

使用道具 举报

发表于 2004-11-23 14:37:00 | 显示全部楼层
[code:1]#include <iostream>
#include <vector>

using namespace std;

// Function f returns n'th Fibonacci number

unsigned int f(int x) {
    vector<unsigned int> fib(2);
    fib[0]=fib[1]=1;
    fib.reserve(x);
    while(x>=fib.size())
        fib.push_back(*(fib.end()-2) + *(fib.end()-1));
    return fib[x];
}

// Function f_print prints out n'th Fibonacci number

void f_print(int n) {
    cout << n << "th Fibonacci number is " << f(n) << endl;
}

// main is the entry point in C++

int main() {
    f_print(46);
    return 0;   
}

[/code:1]
回复

使用道具 举报

 楼主| 发表于 2004-11-25 07:54:04 | 显示全部楼层
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int * ptd;
int max;
int i=0;
printf("you want your ./pormax number:\n");
while (scanf("%d" ,&max) ==1)
{
ptd = (int *)malloc (max*sizeof(int));
if (ptd ==NULL)
{
printf("memory allocation failed .bye.");
exit (EXIT_FAILURE);
}
ptd[0] =1;
ptd[1] =1;
for (i=2; i <max; i++)
*(ptd+i)=*(ptd+i-2)+*(ptd+i-1);
printf("here are your %d entteries\n",i);
printf("the %d number enteredis:%d\n",i, *(ptd+i-1));
printf("please key your now want number or");
printf("ket 'q' to exit.\n");
free (ptd);
}
printf("you key is not anumber.bye.\n");
return 0;
}
   
这样就可以了!我早上就写好了不过学校上不了网!!为有等到现在发上来 !!!多谢楼上各位大哥的帮助!!!
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-7 01:37 , Processed in 0.043225 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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