算法一列数的规则如下 112358132134 求第30位数是多少Word文档格式.docx
- 文档编号:18627936
- 上传时间:2022-12-29
- 格式:DOCX
- 页数:16
- 大小:18.45KB
算法一列数的规则如下 112358132134 求第30位数是多少Word文档格式.docx
《算法一列数的规则如下 112358132134 求第30位数是多少Word文档格式.docx》由会员分享,可在线阅读,更多相关《算法一列数的规则如下 112358132134 求第30位数是多少Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
///普通递归算法--费伯纳契序列///&
index"
第多少位费伯纳契序列数&
staticintFibonacci(intindex){returnindex&
=2?
1:
Fibonacci(index-1)+Fibonacci(index-2);
///改进后递归算法--费伯纳契序列///&
f"
第一位数&
s"
第二数&
第多少位基数从1开始&
count"
publicstaticintfb(intf,ints,intindex,intcount){if(index&
=count){returnfb(s,f+s,index+1,count);
}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;
Class1c1=newClass1(num);
Console.WriteLine(c1.Calculation());
break;
} 回复 引用 查看 #7楼2007-09-0511:
56没剑
@jillzhang
貌似你的位置还有0的... 回复 引用 查看 #8楼2007-09-0511:
58没剑
老大真牛for(i=1;
}returnConvert.ToInt32(list[num-2])+Convert.ToInt32(list[num-3]);
回复 引用 查看 #9楼[楼主]2007-09-0512:
05jillzhang
其实这个方法最大的问题在哪?
在于没有验证pos的正负,这样的一个函数是很容易出错的,也是一个正确的函数,在正确使用的情况下是对的,但特殊情况下就异常了,不知道大家看出来没有 回复 引用 查看 #10楼2007-09-0512:
11没剑
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小耿[未注册用户]
namespaceConsoleApplication3
classA
publicintGetNumberAtPos(intpos)
if(pos==0||pos==1)
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){
}while(pos&
0){
returngetNumber(pos-2)+getNumber(pos-1);
}return-1;
} 回复 引用 查看 #17楼2008-07-2916:
22shawnliu
代码效率太差了把
只需要用两个变量保存前两位不就行了再加一个当前数值,
最后更新一下变量 回复 引用 查看 #18楼2008-07-3114:
23丛林之王
楼主这个貌似应该这样
if(pos==0||pos==-1)
return0;
if(pos==1)
} 回复 引用 #19楼222.89.91.*2008-11-2508:
23哲思[未注册用户]
支持13楼的
namespace算法设计_一列数
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)
}
ints=getNumber(pos-1)+getNumber(pos-2);
returns;
publicstaticintGetNumber(intindex)//index从1开始
inta1=1;
inta2=1;
intcount=2;
a2=a1+a2;
a1=temp;
count++;
}}
执行以后就可以看出差别了
数值的索引越往后差别越明显!
回复 引用 #20楼218.64.57.*2009-03-1610:
09test111111111111111[未注册用户]
intfwdadd(inti)
ints,m,n,flag;
if(i&
3)
m=1;
n=1;
flag=0;
s=1;
for(intk=3;
k&
=i;
k++)
flag=1-flag;
if(flag)
m=m+n;
n=n+m;
returnm;
returnn;
} 回复 引用 查看 #21楼2009-05-2613:
44Funeral
不用递归也能很简单的intfibonacci=0;
for(inti=0,j=0,k=1,fib=1;
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.Linq;
namespaceConsoleApplication1
///费伯纳契序列算法改进
///作者suqifeng
///2011-10-2423:
43
classProgram
{
publicstaticvoidMain(string[]args)
//普通递归算法
Console.WriteLine(Fibonacci(40));
//改进后递归算法
Console.WriteLine(fb(1,1,1,40-2));
///普通递归算法--费伯纳契序列
staticintFibonacci(intindex)
returnindex&
///改进后递归算法--费伯纳契序列
publicstaticintfb(intf,ints,intindex,intcount)
if(index&
returnfb(s,f+s,index+1,count);
returns;
///改进后递归算法--费伯纳契序列数求和
publicstaticintfbcSum(intf,ints,intindex,intcount)
returnfbcSum(s,f+s,index+1,count);
return(f+s)-2;
} 回复 引用 查看 #24楼2012-03-2014:
07不死鸟一灰1
privatestaticintSum(intnum)
if(num&
3)return1;
returnSum(num-1)+
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法一列数的规则如下 112358132134 求第30位数是多少 算法 一列 规则 如下 30 位数 是多少