从求 Fibonacci 数的 4 个函数来分析大家的编程功底
2011.10.17 by jack_incredible
经典的 Fibonacci 问题,看了你就懂了 :)
已知 f(n) = f(n-1) + f(n-2) ,f(0) = 0 ,f(1) = 1。 求 f(n)
函数 1: (大一时候的我写的程序大概就是这样一个面貌)
long fib_r(int n)
{
if (n == 0) return(0);
if (n == 1) return(1);
return(fib_r(n-1) + fib_r(n-2));
}
函数 2:(大三或者大四的时候,估计我当时能写成这个样子就不错了)
long fib_c(int n)
{
if (f[n] == UNKNOWN)
f[n] = fib_c(n-1) + fib_c(n-2);
return(f[n]);
}
long fib_c_driver(int n)
{
int i; /* counter */
f[0] = 0;
f[1] = 1;
for (i=2; i<=n; i++) f[i] = UNKNOWN; return(fib_c(n));
}
函数 3:(现在的常规思维,能写成这个样子就不错了~)
long fib_dp(int n)
{
int i; /* counter */
long f[MAXN+1]; /* array to cache computed fib values */
f[0] = 0;
f[1] = 1;
for (i=2; i<=n; i++) f[i] = f[i-1]+f[i-2];
return(f[n]);
}
函数 4: (对于经常做时间优化,空间优化的你,难道这种方法没想到吗?惭愧啊!!!!!!)
long fib_ultimate(int n)
{
int i; /* counter */
long back2=0, back1=1; /* last two values of f[n] */
long next; /* placeholder for sum */
if (n == 0) return (0);
for (i=2; i<n; i++) {
next = back1+back2;
back2 = back1;
back1 = next;
} return(back1+back2);
}
2011.10.17 by jack_incredible
经典的 Fibonacci 问题,看了你就懂了 :)
已知 f(n) = f(n-1) + f(n-2) ,f(0) = 0 ,f(1) = 1。 求 f(n)
函数 1: (大一时候的我写的程序大概就是这样一个面貌)
long fib_r(int n)
{
if (n == 0) return(0);
if (n == 1) return(1);
return(fib_r(n-1) + fib_r(n-2));
}
函数 2:(大三或者大四的时候,估计我当时能写成这个样子就不错了)
long fib_c(int n)
{
if (f[n] == UNKNOWN)
f[n] = fib_c(n-1) + fib_c(n-2);
return(f[n]);
}
long fib_c_driver(int n)
{
int i; /* counter */
f[0] = 0;
f[1] = 1;
for (i=2; i<=n; i++) f[i] = UNKNOWN; return(fib_c(n));
}
函数 3:(现在的常规思维,能写成这个样子就不错了~)
long fib_dp(int n)
{
int i; /* counter */
long f[MAXN+1]; /* array to cache computed fib values */
f[0] = 0;
f[1] = 1;
for (i=2; i<=n; i++) f[i] = f[i-1]+f[i-2];
return(f[n]);
}
函数 4: (对于经常做时间优化,空间优化的你,难道这种方法没想到吗?惭愧啊!!!!!!)
long fib_ultimate(int n)
{
int i; /* counter */
long back2=0, back1=1; /* last two values of f[n] */
long next; /* placeholder for sum */
if (n == 0) return (0);
for (i=2; i<n; i++) {
next = back1+back2;
back2 = back1;
back1 = next;
} return(back1+back2);
}