我在动态规划方面有些困难。更具体地说,是实现一个找到n个斐波那契数列的算法。
我有一个原始的算法可行:
int fib(int n) {
if(n <= 1)
return n;
return fib(n-1) + fib(n-2);
}
但是当我尝试使用记忆化时,该函数总是返回0:
int fib_mem(int n) {
if(lookup_table[n] == NIL) {
if(n <= 1)
lookup_table[n] = n;
else
lookup_table[n] = fib_mem(n-1) + fib_mem(n-2);
}
return lookup_table[n];
}
我已经定义了lookup_table,并在所有元素中最初存储了NIL。
有什么想法是什么出了问题吗?
这是整个程序,如所请求:
#include <iostream>
#define NIL -1
#define MAX 100
long int lookup_table[MAX];
using namespace std;
int fib(int n);
int fib_mem(int n);
void initialize() {
for(int i = 0; i < MAX; i++) {
lookup_table[i] == NIL;
}
}
int main() {
int n;
long int fibonnaci, fibonacci_mem;
cin >> n;
// naive solution
fibonnaci = fib(n);
// memoized solution
initialize();
fibonacci_mem = fib_mem(n);
cout << fibonnaci << endl << fibonacci_mem << endl;
return 0;
}
int fib(int n) {
if(n <= 1)
return n;
return fib(n-1) + fib(n-2);
}
int fib_mem(int n) {
if(lookup_table[n] == NIL) {
if(n <= 1)
lookup_table[n] = n;
else
lookup_table[n] = fib_mem(n-1) + fib_mem(n-2);
}
return lookup_table[n];
}
lookup_table
зҡ„еҲқе§ӢеҢ–д»Јз ҒпјҢNIL
зҡ„е®ҡд№үд»ҘеҸҠеҰӮдҪ•и°ғз”Ёfib_mem
пјҹ - alexeykuzmin0==
。 - harmands