应该返回n
数组的位置。但我只得到 0 而不是值。
int fibonacci(int n)
{
int f[100];
f[0] = 0;
f[1] = 1;
for (int i=2; i<n; i++)
{
f[i] = f[i-2] + f[i-1];
}
return f[n];
}
int main()
{
cout << fibonacci(3);
return 0;
}
新代码:
新问题是它返回的数字比它应该返回的数字还要多。例如,如果“n==7”,则返回“13”,而不是应有的“8”。
int fibonacci(int n)
{
int f[100] = { 0, 1 };
for (int i=2; i<=n; i++)
{
f[i] = f[i-2] + f[i-1];
}
return f[n-1];
}
int main()
{
cout << fibonacci(7);
return 0;
}
好吧,你从来没有设置过f[n]
,你只需要达到i < n
, 那是,i == n-1
。
尝试返回f[n-1]
编辑:正如克里斯·卢茨指出的那样,我的答案不好,因为如果你打电话,它会给出无效的结果fibonacci(0)
就像许多人已经回答的那样,最好的解决方案是循环直到i <= n
当然,除非你想要fibonacci(3)
返回斐波那契数列中的第三个元素而不是第四个元素,在这种情况下fibonacci(0)
真的没有意义,正确的返回值是f[n-1]
...仍然是n==0
案件应该以某种方式处理,也应该n<0
and the n>100
cases.
你可以返回f[n-1]
只要你检查正确的边界:
int fibonacci(int n)
{
int f[100] = { 0, 1 };
if ((n <= 0) || (n > 100))
return -1;//return some invalid number to tell the caller that he used bad input
for (int i=2; i < n; i++) // you can use i < n here
{
f[i] = f[i-2] + f[i-1];
}
return f[n-1];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)