日期:2014-05-17  浏览次数:21478 次

一个算法题: 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
。。。。
------解决方案--------------------
引用:
这个题是已解了,我想问的是 怎么看“1、1、2、3、5、8、13、21、34 ”这列数字而推算出来的 GetNumberAtPos(pos - 1) + GetNumberAtPos(pos - 2);这个规则公式的?


第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
------解决方案--------------------
菲波那切数列,基本算法题目,基本上任何一本计算机编程类的教材都会讲到。
------解决方案--------------------
你这不是明显数学没学好么,
------解决方案--------------------
看规律,一般给定的题目数字在前后之间都是有规律可寻的
前两个数之和等于第三个数。

------解决方案--------------------
其实楼主知道是这么个数列
------解决方案--------------------
肥婆拉切那个啥吧
------解决方案--------------------
后面一项是前两项的和,采用递归调用,代码简洁
------解决方案--------------------
为什么非要递归啊
----