当前位置:编程学习 > C#/ASP.NET >>

C#递归算法

有一列数字:1,1,2,3,5.。。n,用递归找到n(n>2)位数是多少? --------------------编程问答-------------------- int F(int n)
{
   if (n <= 2)
      return 1;
   else
      return F(n-1)+F(n-2);
} --------------------编程问答-------------------- 楼上大牛出现了 --------------------编程问答-------------------- http://www.cnblogs.com/cuiweifu/archive/2008/03/05/1091604.html --------------------编程问答-------------------- 哈哈还必须得递归呀 --------------------编程问答-------------------- 科普下 http://baike.baidu.com/view/816.htm#sub816
非常反感第一个把 Fibonacci 作为递归算法引入教学误导学生的人。

只要不是傻子,一眼就看出来了,根本用不到递归。

给学生留下的印象是递归好复杂!性能好差!递归没用!但是这完全是因为老师用了不恰当的例子误导学生的结果。 --------------------编程问答-------------------- 是呀,其实问题不在递归本身,而是递归算法的复杂度,不过稍加改进效率就能上来,还能顺便了解递归的备忘录形式。

using System;

namespace CsdnTest
{
    class Program
    {
        static long[] ArrayFib = new long[100];

        static void Main(string[] args)
        {
            Console.WriteLine(F(60));
        }

        static long F(int n)
        {
            if (n <= 2)
                return 1;
            else if (ArrayFib[n] == 0)
                ArrayFib[n] = F(n - 1) + F(n - 2); 
               
            return ArrayFib[n];
        }
    }
}


引用 5 楼 caozhy 的回复:
科普下 http://baike.baidu.com/view/816.htm#sub816
非常反感第一个把 Fibonacci 作为递归算法引入教学误导学生的人。

只要不是傻子,一眼就看出来了,根本用不到递归。

给学生留下的印象是递归好复杂!性能好差!递归没用!但是这完全是因为老师用了不恰当的例子误导学生的结果。
--------------------编程问答-------------------- 恩,递归 没怎么用过 --------------------编程问答--------------------
引用 1 楼 fengyuanmsft 的回复:
int F(int n)
{
   if (n <= 2)
      return 1;
   else
      return F(n-1)+F(n-2);
}


正解 --------------------编程问答-------------------- --------------------编程问答-------------------- 大家都好像看错了,楼主要找的是n的位数是多少,不是n是多少 --------------------编程问答-------------------- 不解释,算法就是浮云,说白了就自己调自己,判断一下什么条件跳出去就OK了,没那么玄乎 --------------------编程问答-------------------- 我也看到了。
引用 10 楼 lcl_data 的回复:
大家都好像看错了,楼主要找的是n的位数是多少,不是n是多少
--------------------编程问答--------------------
引用 5 楼 caozhy 的回复:
科普下 http://baike.baidu.com/view/816.htm#sub816
非常反感第一个把 Fibonacci 作为递归算法引入教学误导学生的人。

只要不是傻子,一眼就看出来了,根本用不到递归。

给学生留下的印象是递归好复杂!性能好差!递归没用!但是这完全是因为老师用了不恰当的例子误导学生的结果。


递归本来就可以用循环代替 --------------------编程问答--------------------
引用 13 楼 huwei001982 的回复:
引用 5 楼 caozhy 的回复:

科普下 http://baike.baidu.com/view/816.htm#sub816
非常反感第一个把 Fibonacci 作为递归算法引入教学误导学生的人。

只要不是傻子,一眼就看出来了,根本用不到递归。

给学生留下的印象是递归好复杂!性能好差!递归没用!但是这完全是因为老师用了不恰当的例子误导学生的结果。


递归本来就可……

不同意,用循环排序和递归排序你感觉效率是一样的?数据量小可能一样大的话呢?你有没有考虑过这个问题?
--------------------编程问答--------------------
引用 10 楼 lcl_data 的回复:
大家都好像看错了,楼主要找的是n的位数是多少,不是n是多少

是你看错了。 --------------------编程问答--------------------  斐波那契问题,呵 --------------------编程问答-------------------- 6楼是在误导吗?你的算法是有问题的。

        int Fibonacci(int n)
        {
            int x = 0, y = 1;
            for (int j = 1; j <= n; j++)
            {
                y = x + y;
                x = y - x;
            }
            return y;
        }
--------------------编程问答-------------------- 啥问题呀?说说看

引用 17 楼 scm_2008 的回复:
6楼是在误导吗?你的算法是有问题的。
--------------------编程问答-------------------- 还是不懂 --------------------编程问答-------------------- 还是不懂 --------------------编程问答-------------------- 这是最简单的递归算法,我记得C++基础教材上讲递归概念就是以这个为例的。
以C#语法,应该这么写:
private int Foo(int n)
{
   if (n<1)
      return 0;
   if (n>=1 && n<=2)
      return 1;
   else
      return Foo(n-1)+Foo(n-2);
} --------------------编程问答-------------------- 最好不要用单纯的递归,要用也要加上备忘录形式,否则那算法复杂度会蛋疼死的。
其实从数学的角度来解决这题嘛。。递归神马的都是渣。直接套公式好了。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,