int fibo(int n, int a, int b){
return (n>0) ? fibo(n-1, b, a+b) : a;
}
main(){
printf("5th term of fibo is %d", fibo(5 - 1, 0, 1));
}
要打印出所有项,直到第n项为止:
int fibo(int n, int a, int b){
printf("%d ", a);
return (n>0)? fibo(n-1, b, a+b): a;
}
我把这段代码展示给了我的大学教授,根据她的意见,这种解决斐波那契问题的方式是错误的,因为它没有抽象出方法。我应该使用被称为fibo(n)的函数来调用,而不是fibo(n, 0, 1)。对我来说,这并不是一个令人满意的答案,所以我想向SOF上的专家询问。
它相对于传统的斐波那契问题解决方法有其优势。我们采用两个并行递归来得到斐波那契数列的第n项(fibo(n-1) + fibo(n-2)),这种技术在给出100项时可能会很慢,而即使在最坏情况下,我的技术也会更快。
为了抽象它,我可以使用默认参数,但C语言不支持这样做。虽然我可以使用类似于-
int fibo(int n){return fiboN(n - 1, 0, 1);}
int fiboN(int n, int a, int b){return (n>0)? fiboN(n-1, b, a+b) : a;}
但是仅仅抽象整个想法就足够了吗?我该如何说服别人这种方法并不是错误的(虽然有点模糊)?
(我知道,这不是我应该在SOF上问的问题,但我只是想从这里的专家那里获得建议。)
fibo(5,0,1)
时传递的额外数字是第一和第二个,而这些在计算第五个数时没有用处。 - Tim Randall