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];
}
}
}
--------------------编程问答-------------------- 恩,递归 没怎么用过 --------------------编程问答--------------------
正解 --------------------编程问答-------------------- --------------------编程问答-------------------- 大家都好像看错了,楼主要找的是n的位数是多少,不是n是多少 --------------------编程问答-------------------- 不解释,算法就是浮云,说白了就自己调自己,判断一下什么条件跳出去就OK了,没那么玄乎 --------------------编程问答-------------------- 我也看到了。 --------------------编程问答--------------------
递归本来就可以用循环代替 --------------------编程问答--------------------
不同意,用循环排序和递归排序你感觉效率是一样的?数据量小可能一样大的话呢?你有没有考虑过这个问题?
--------------------编程问答--------------------
是你看错了。 --------------------编程问答-------------------- 斐波那契问题,呵 --------------------编程问答-------------------- 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;
}
--------------------编程问答-------------------- 还是不懂 --------------------编程问答-------------------- 还是不懂 --------------------编程问答-------------------- 这是最简单的递归算法,我记得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#