一个算法题: 一、1、2、3、5、8、13、21、34 求第30位数是多少
一个算法题: 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
。。。。
------解决方案--------------------
第n个数,是第n-1个数与第n-2个数之和。并且第1、第2个数都是1。
就思想上来说,这是简单的“函数映射”概念。
如果上过理科,学过各门类的数学模型(例如如果你学过物理学,是否还有点印象、有正规的老师给你讲过“拉格朗日电磁方程”呢?),会反复地在7、8个不同的基础课程中受到这类训练。所以说上学就是干这个的,学校不会给你真金白银,但是会影响人的一生。
知道编程里能体现递归函数计算,这就好象是知道“蔬菜里有盐分”一样,只要有别的基础就能记住了。
------解决方案--------------------
小学数学
------解决方案--------------------
菲波拉契数列,从第三项开始,每项等于前两项之和。
用递推表示就是
f(1) = 1
f(2) = 1
f(n) = f(n - 1) + f(n - 2) n >= 3
------解决方案--------------------
菲波那切数列,基本算法题目,基本上任何一本计算机编程类的教材都会讲到。
------解决方案--------------------
你这不是明显数学没学好么,
------解决方案--------------------
看规律,一般给定的题目数字在前后之间都是有规律可寻的
前两个数之和等于第三个数。
------解决方案--------------------
其实楼主知道是这么个数列
------解决方案--------------------
肥婆拉切那个啥吧
------解决方案--------------------
后面一项是前两项的和,采用递归调用,代码简洁
------解决方案--------------------
为什么非要递归啊
------解决方案--------------------
递归方便简洁,用循环也可以额
------解决方案--------------------
/// <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
。。。。
------解决方案--------------------
第n个数,是第n-1个数与第n-2个数之和。并且第1、第2个数都是1。
就思想上来说,这是简单的“函数映射”概念。
如果上过理科,学过各门类的数学模型(例如如果你学过物理学,是否还有点印象、有正规的老师给你讲过“拉格朗日电磁方程”呢?),会反复地在7、8个不同的基础课程中受到这类训练。所以说上学就是干这个的,学校不会给你真金白银,但是会影响人的一生。
知道编程里能体现递归函数计算,这就好象是知道“蔬菜里有盐分”一样,只要有别的基础就能记住了。
------解决方案--------------------
小学数学
------解决方案--------------------
菲波拉契数列,从第三项开始,每项等于前两项之和。
用递推表示就是
f(1) = 1
f(2) = 1
f(n) = f(n - 1) + f(n - 2) n >= 3
------解决方案--------------------
菲波那切数列,基本算法题目,基本上任何一本计算机编程类的教材都会讲到。
------解决方案--------------------
你这不是明显数学没学好么,
------解决方案--------------------
看规律,一般给定的题目数字在前后之间都是有规律可寻的
前两个数之和等于第三个数。
------解决方案--------------------
其实楼主知道是这么个数列
------解决方案--------------------
肥婆拉切那个啥吧
------解决方案--------------------
后面一项是前两项的和,采用递归调用,代码简洁
------解决方案--------------------
为什么非要递归啊
------解决方案--------------------
递归方便简洁,用循环也可以额
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);
}