【发布时间】:2016-02-24 10:21:52
【问题描述】:
我很难编写一个使用递归返回斐波那契数列的方法。
我的迭代方法如下:
public static string Fibonacci(int n)
{
if (n < 2)
return "1";
int[] numbers = new int[n];
numbers[0]=0;
numbers[1]=1;
for (int i = 2; i < n; i++)
{
numbers[i] = numbers[i - 1] + numbers[i - 2];
}
return string.Join(" ", numbers);
}
我希望将上述方法更改为递归调用,但具有相同的签名,即返回类型是字符串,它返回斐波那契数列,例如 0,1,1,2,3,5,8,13,21,34,55
我在谷歌上搜索过,但在任何地方我都看到它使用 Console.WriteLine() 完成,即值被打印到屏幕上,但没有从函数作为字符串返回。
谢谢
【问题讨论】:
-
WriteLine 是否在计算时打印每个值?您可以修改它以将它们连接到字符串的末尾,然后在最后返回该字符串。
-
您可以从 0 或 1 开始序列。返回“1”;和数字[0]=0;不匹配。
-
这里的教训是:使用适当的变量类型。如果事物是数字,请将它们放入数字变量(int、double、long、...) - 尤其是,如果您需要对它们进行计算。如果调用者需要一个字符串,他们可以自己调用 .ToString。从数字到字符串(反之亦然)的转换效率低下,应尽可能避免以提高性能和可读性。