读书人

一个算法题: 一、1、2、3、5、8、13、

发布时间: 2013-10-16 11:29:46 作者: rapoo

一个算法题: 1、1、2、3、5、8、13、21、34 求第30位数是多少
/// <summary>
/// 一列数的规则如下: 1、1、2、3、5、8、13、21、34 求第30位数是多少, 用递归算法实现。(C#语言)
/// </summary>
/// <param name="pos"></param>
/// <returns></returns>
public int GetNumberAtPos(int pos)
{
if(pos==0||pos==1)
{
return 1;
}
int res = GetNumberAtPos(pos - 1) + GetNumberAtPos(pos - 2);
return res;
}
================================================================================
这个题是已解了,我想问的是 怎么看“1、1、2、3、5、8、13、21、34 ”这列数字而推算出来的 GetNumberAtPos(pos - 1) + GetNumberAtPos(pos - 2);这个规则公式的?
1+1=2
1+2=3
2+3=5
。。。。
[解决办法]

小学数学
[解决办法]
菲波拉契数列,从第三项开始,每项等于前两项之和。
用递推表示就是
f(1) = 1
f(2) = 1
f(n) = f(n - 1) + f(n - 2) n >= 3
[解决办法]
菲波那切数列,基本算法题目,基本上任何一本计算机编程类的教材都会讲到。
[解决办法]
你这不是明显数学没学好么,
[解决办法]
看规律,一般给定的题目数字在前后之间都是有规律可寻的
前两个数之和等于第三个数。

[解决办法]
其实楼主知道是这么个数列
[解决办法]
肥婆拉切那个啥吧一个算法题: 一、1、2、3、5、8、13、21、34   求第30位数是多少
[解决办法]
后面一项是前两项的和,采用递归调用,代码简洁
[解决办法]
为什么非要递归啊
[解决办法]
引用:
为什么非要递归啊
递归方便简洁,用循环也可以额

DECLARE @i INT=3
DECLARE @f1 INT=1,@f2 INT =1,@f3 INT
WHILE @i <=30
BEGIN
SELECT @f3 = @f1 + @f2
PRINT @f3

SET @f1=@f2
SET @f2=@f3

SET @i=@i+1
END

[解决办法]

function fib(n) {
var fib_n = function (curr, next, n) {
if (n === 0) {
return curr;
} else {
return fib_n(next, curr + next, n - 1);
}
}
return fib_n(0, 1, n);
}



官方代码。。
[解决办法]
看这列数有什么规律,不需要技巧,需要智商。
[解决办法]
典型的斐波拉契数列
[解决办法]
递归在java中有个很严重的问题就是占内存 我记得N=31的时候必溢出


[解决办法]
幼儿园数学~
[解决办法]
对于这种带规律的题目,如果有经验的话,看几下就能看出来以前可能有类似的,如果是没那经验看不出的,那就尝试动手拼接一下猜数,我考试时经常用后者,后者用多了,就有前者了。一个算法题: 一、1、2、3、5、8、13、21、34   求第30位数是多少

读书人网 >C#

热点推荐