一个算法题: 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
------解决方案--------------------菲波那切数列,基本算法题目,基本上任何一本计算机编程类的教材都会讲到。
------解决方案--------------------你这不是明显数学没学好么,
------解决方案--------------------看规律,一般给定的题目数字在前后之间都是有规律可寻的
前两个数之和等于第三个数。
------解决方案--------------------其实楼主知道是这么个数列
------解决方案--------------------肥婆拉切那个啥吧
------解决方案--------------------后面一项是前两项的和,采用递归调用,代码简洁
------解决方案--------------------为什么非要递归啊
----