1

我刚刚在 C# 中发现了 Generic 委托,并且正在考虑是否可以递归地使用它们,我想出了这个简单的部分,它只返回一串斐波那契数字,直到一个限制。

Func<int, int, string, string> Fibonanci;
Fibonanci = delegate( int a, int b, string c )
{
    return "";
};
Fibonanci = delegate( int a, int b, string c )
{
    if( ( a == 0 ) && ( b == 0 ) )
    {
        b = 1;
        c += ( "0" + ( a.ToString() + b.ToString() ) ); 
    }
    else
    {
        c += ( a + b ).ToString();
    }

    if( ( a >= limit ) || ( b >= limit ) )
    {
        return ( c );
    }
    else
    {
        return Fibonanci( b, ( b + a ), c );
    }
};

这是我的代码,它运行良好,我要问的问题是是否有办法删除第一个分配(我收到错误说我使用了未分配的变量)

4

2 回答 2

1

从技术上讲,您可以像这样分配它:

Func<int, int, string, string> Fibonanci = null;

这将使您不必这样做:

Fibonanci = delegate( int a, int b, string c )
{
    return "";
};
于 2013-10-15T12:42:56.343 回答
0

在您的 Fibonanci 声明中...将其分配给 null...

Func<int, int, string, string> Fibonanci = null;

Fibonanci = delegate(int a, int b, string c)
{
    if ((a == 0) && (b == 0))
    {
        b = 1;
        c += ("0" + (a.ToString() + b.ToString()));
    }
    else
    {
        c += (a + b).ToString();
    }

    if ((a >= limit) || (b >= limit))
    {
        return (c);
    }
    else
    {
        return Fibonanci(b, (b + a), c);
    }
};

我不能告诉你为什么会这样,但我遇到过很多次!

于 2013-10-15T12:46:53.847 回答