算法一列数的规则如下 112358132134 求第30位数是多少.docx

上传人:b****6 文档编号:5640833 上传时间:2022-12-29 格式:DOCX 页数:16 大小:18.45KB
下载 相关 举报
算法一列数的规则如下 112358132134 求第30位数是多少.docx_第1页
第1页 / 共16页
算法一列数的规则如下 112358132134 求第30位数是多少.docx_第2页
第2页 / 共16页
算法一列数的规则如下 112358132134 求第30位数是多少.docx_第3页
第3页 / 共16页
算法一列数的规则如下 112358132134 求第30位数是多少.docx_第4页
第4页 / 共16页
算法一列数的规则如下 112358132134 求第30位数是多少.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

算法一列数的规则如下 112358132134 求第30位数是多少.docx

《算法一列数的规则如下 112358132134 求第30位数是多少.docx》由会员分享,可在线阅读,更多相关《算法一列数的规则如下 112358132134 求第30位数是多少.docx(16页珍藏版)》请在冰豆网上搜索。

算法一列数的规则如下 112358132134 求第30位数是多少.docx

算法一列数的规则如下112358132134求第30位数是多少

算法:

【一列数的规则如下112358132134,求第30位数是多少...

算法:

【一列数的规则如下:

1、1、2、3、5、8、13、21、34,求第30位数是多少,用递归算法实现。

(C#语言)】///<summary>

///一列数的规则如下:

1、1、2、3、5、8、13、21、34求第30位数是多少,用递归算法实现。

(C#语言)

///</summary>

///<paramname="pos"></param>

///<returns></returns>

publicintGetNumberAtPos(intpos)

{

if(pos==0||pos==1)

{

return1;

}

intres=GetNumberAtPos(pos-1)+GetNumberAtPos(pos-2);

returnres;

}usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceConsoleApplication1{///<summary>///费伯纳契序列算法改进///作者suqifeng///2011-10-2423:

43///</summary>classProgram{publicstaticvoidMain(string[]args){//普通递归算法Console.WriteLine(Fibonacci(40));//改进后递归算法Console.WriteLine(fb(1,1,1,40-2));Console.Read();}///<summary>///普通递归算法--费伯纳契序列///</summary>///<paramname="index">第多少位费伯纳契序列数</param>///<returns></returns>staticintFibonacci(intindex){returnindex<=2?

1:

Fibonacci(index-1)+Fibonacci(index-2);}///<summary>///改进后递归算法--费伯纳契序列///</summary>///<paramname="f">第一位数</param>///<paramname="s">第二数</param>///<paramname="index">第多少位基数从1开始</param>///<paramname="count">第多少位费伯纳契序列数</param>///<returns></returns>publicstaticintfb(intf,ints,intindex,intcount){if(index<=count){returnfb(s,f+s,index+1,count);}returns;}///<summary>///改进后递归算法--费伯纳契序列数求和///</summary>///<paramname="f">第一位数</param>///<paramname="s">第二数</param>///<paramname="index">第多少位基数从1开始</param>///<paramname="count">第多少位费伯纳契序列数</param>///<returns></returns>publicstaticintfbcSum(intf,ints,intindex,intcount){if(index<=count){returnfbcSum(s,f+s,index+1,count);}return(f+s)-2;}}}

递归算法有个问题。

从n-2到3都算了2次。

 回复 引用 查看 #2楼[楼主]2007-09-0509:

28jillzhang

@Zeus2

有什么解决办法么?

 回复 引用 查看 #3楼2007-09-0509:

31没剑

应该要从第三位开始才递归吧

PrivateFunctiongetPos(ByValposAsInteger)AsInteger

Ifpos<=2ThenReturn1

ReturngetPos(pos-2)+getPos(pos-1)

EndFunction 回复 引用 查看 #4楼[楼主]2007-09-0509:

53jillzhang

@没剑

我的也是从第三位开始的咧 回复 引用 #5楼222.66.167.*2007-09-0510:

08小7[未注册用户]

那道面试题...... 回复 引用 查看 #6楼2007-09-0510:

17D.Oliver

不用递归不是更好吗?

usingSystem;

usingSystem.Collections;

usingSystem.Collections.Generic;

usingSystem.Text;namespaceTest

{

publicclassClass1

{

privateArrayListlist=newArrayList();publicClass1()

{

}publicClass1(intnum)

:

base()

{

inti;for(i=1;i<=num;i++)

{

list.Add(Calculation(i));

}

}privateintCalculation(intnum)

{

if(num==1||num==2)

return1;

else

returnConvert.ToInt32(list[num-2])+Convert.ToInt32(list[num-3]);

}publicintCalculation()

{

returnConvert.ToInt32(list[list.Count-1]);

}

}publicclasstest

{

publicstaticvoidMain()

{

intj;

intnum;

for(j=1;j<100;j++)

{

Console.WriteLine("你要计算第多少位:

");

stringreadstr;

readstr=Console.ReadLine();

if(!

string.IsNullOrEmpty(readstr))

{

if(int.TryParse(readstr,outnum))

{

if(num<1)

continue;

else

{

Class1c1=newClass1(num);

Console.WriteLine(c1.Calculation());

}

}

else

{

continue;

}

}

else

{

break;

}

}

}

}

} 回复 引用 查看 #7楼2007-09-0511:

56没剑

@jillzhang

貌似你的位置还有0的... 回复 引用 查看 #8楼2007-09-0511:

58没剑

老大真牛for(i=1;i<=num;i++)

{

list.Add(Calculation(i));

}

}returnConvert.ToInt32(list[num-2])+Convert.ToInt32(list[num-3]); 回复 引用 查看 #9楼[楼主]2007-09-0512:

05jillzhang

其实这个方法最大的问题在哪?

在于没有验证pos的正负,这样的一个函数是很容易出错的,也是一个正确的函数,在正确使用的情况下是对的,但特殊情况下就异常了,不知道大家看出来没有 回复 引用 查看 #10楼2007-09-0512:

11没剑

PrivateFunctiongetPos(ByValposAsInteger)AsInteger

Ifpos<=2ThenReturn1

ReturngetPos(pos-2)+getPos(pos-1)

EndFunction

我的完成没有这个问题  回复 引用 查看 #11楼2007-09-3008:

56麒麟.NET

Fibonacci数列啊 回复 引用 查看 #12楼2007-11-0610:

421-2-3

好像有一种用公式来计算的方法,公式好像挺复杂的,好像在网上见过一次。

 回复 引用 #13楼220.181.47.*2007-11-2517:

27possible[未注册用户]

publicintGetNumber(intindex)//index从1开始

{

inta1=1,

inta2=1,

inttemp;

intcount=3

while(index>=count)

{

temp=a2;

a2=a1+a2

a1=temp

count++

}

returna2;

} 回复 引用 #14楼218.28.144.*2007-12-2114:

50小耿[未注册用户]

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;namespaceConsoleApplication3

{

classA

{

publicintGetNumberAtPos(intpos)

{

if(pos==0||pos==1)

{

return1;

}

intres=GetNumberAtPos(pos-1)+GetNumberAtPos(pos-2);

returnres;

}

}

classProgram

{staticvoidMain(string[]args)

{

An=newA();Console.WriteLine(n.GetNumberAtPos(29));

Console.ReadLine();

//inti=1;

//while(i<4)

//{//}}

}

} 回复 引用 #15楼220.163.56.*2007-12-2622:

15NetCare[未注册用户]

inta1=1,a2=1,returnValue;

for(inti=2;i<num;i++)

{

returnValue=a2;

a2+=a1;

a1=returnValue;

}

returna1; 回复 引用 #16楼219.131.199.*2008-02-0514:

37imetgong[未注册用户]

publicintgetNumber(intpos){

if(pos<1){

return-1;

}if(pos<3){

return1;

}while(pos>0){

returngetNumber(pos-2)+getNumber(pos-1);

}return-1;

} 回复 引用 查看 #17楼2008-07-2916:

22shawnliu

代码效率太差了把

只需要用两个变量保存前两位不就行了再加一个当前数值,

最后更新一下变量 回复 引用 查看 #18楼2008-07-3114:

23丛林之王

楼主这个貌似应该这样

publicintGetNumberAtPos(intpos)

{

if(pos==0||pos==-1)

{

return0;

}

if(pos==1)

{

return1;

}

intres=GetNumberAtPos(pos-1)+GetNumberAtPos(pos-2);

returnres;

} 回复 引用 #19楼222.89.91.*2008-11-2508:

23哲思[未注册用户]

支持13楼的

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;namespace算法设计_一列数

{

classProgram

{

staticvoidMain(string[]args)

{DateTimetime2=DateTime.Now;

Console.WriteLine(time2.ToString());

intnumber2=GetNumber(30);

DateTimetime3=DateTime.Now;

Console.WriteLine(time3.ToString());

TimeSpant2=time3.Subtract(time2);

Console.WriteLine(t2.ToString());

Console.WriteLine(number2);

DateTimetime=DateTime.Now;

Console.WriteLine(time.ToString());

intnumber=getNumber(30);

DateTimetime1=DateTime.Now;

Console.WriteLine(time1.ToString());

TimeSpant1=time1.Subtract(time);

Console.WriteLine(t1.ToString());

Console.WriteLine(number);}publicstaticintgetNumber(intpos)

{

if(pos==0||pos==1)

{

return1;}

ints=getNumber(pos-1)+getNumber(pos-2);

returns;}

publicstaticintGetNumber(intindex)//index从1开始

{

inta1=1;

inta2=1;

inttemp;

intcount=2;

while(index>=count)

{

temp=a2;

a2=a1+a2;

a1=temp;

count++;

}

returna2;

}}

}

执行以后就可以看出差别了

数值的索引越往后差别越明显!

 回复 引用 #20楼218.64.57.*2009-03-1610:

09test111111111111111[未注册用户]

intfwdadd(inti)

{

ints,m,n,flag;

if(i<3)

return1;

else

{

m=1;n=1;flag=0;s=1;

for(intk=3;k<=i;k++)

{

flag=1-flag;

if(flag)

m=m+n;

else

n=n+m;}

if(flag)

returnm;

else

returnn;

}

} 回复 引用 查看 #21楼2009-05-2613:

44Funeral

不用递归也能很简单的intfibonacci=0;

for(inti=0,j=0,k=1,fib=1;i<30;fib=j+k,j=k,k=fib,i++)

{

fibonacci=fib;

}

Console.WriteLine(fibonacci);

Console.Read(); 回复 引用 #22楼119.147.107.*2009-07-0800:

46liubaiwu[未注册用户]

privateintadd(intf,ints,intindex)

{

intresult=f+s;

if(index<=30)

{

returnadd(s,result,index+1);

}

returnresult;

}

这样的解决方法 回复 引用 查看 #23楼2011-10-2423:

51长沙-C#山高我为峰ViewCode1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

 

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

namespaceConsoleApplication1

{

///<summary>

///费伯纳契序列算法改进

///作者suqifeng

///2011-10-2423:

43

///</summary>

classProgram

{

publicstaticvoidMain(string[]args)

{

//普通递归算法

Console.WriteLine(Fibonacci(40));

//改进后递归算法

Console.WriteLine(fb(1,1,1,40-2));

Console.Read();

}

///<summary>

///普通递归算法--费伯纳契序列

///</summary>

///<paramname="index">第多少位费伯纳契序列数</param>

///<returns></returns>

staticintFibonacci(intindex)

{

returnindex<=2?

1:

Fibonacci(index-1)+Fibonacci(index-2);

}

///<summary>

///改进后递归算法--费伯纳契序列

///</summary>

///<paramname="f">第一位数</param>

///<paramname="s">第二数</param>

///<paramname="index">第多少位基数从1开始</param>

///<paramname="count">第多少位费伯纳契序列数</param>

///<returns></returns>

publicstaticintfb(intf,ints,intindex,intcount)

{

if(index<=count)

{

returnfb(s,f+s,index+1,count);

}

returns;

}

///<summary>

///改进后递归算法--费伯纳契序列数求和

///</summary>

///<paramname="f">第一位数</param>

///<paramname="s">第二数</param>

///<paramname="index">第多少位基数从1开始</param>

///<paramname="count">第多少位费伯纳契序列数</param>

///<returns></returns>

publicstaticintfbcSum(intf,ints,intindex,intcount)

{

if(index<=count)

{

returnfbcSum(s,f+s,index+1,count);

}

return(f+s)-2;

}

}

} 回复 引用 查看 #24楼2012-03-2014:

07不死鸟一灰1

2

3

4

5

 

privatestaticintSum(intnum)

{

if(num<3)return1;

returnSum(num-1)+

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 笔试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1