#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MEMENTO_LEN 30
int memento[MEMENTO_LEN]={0};//备忘录
int fibonacci_memento( int n){
if(memento[n]!=-1){
return memento[n];
}
int t=0;
if(n<=1){
t=n;
}else{
t=fibonacci_memento(n-1)+fibonacci_memento(n-2);
}
memento[n]=t;
return t;
}
int fibonacci( int n){
int t=0;
if(n<=1){
t=n;
}else{
t=fibonacci(n-1)+fibonacci(n-2);
}
return t;
}
void init(){
for(int i=0;i<MEMENTO_LEN;i++)
memento[i]=-1;
}
int main(){
int i=0;
clock_t start,end;
init();
start=clock();
for(i=MEMENTO_LEN-1;i>=0;i--){
fibonacci(i);
}
end=clock();
printf("\nruntime=%ld-%ld\n",end,start);
start=clock();
for(i=MEMENTO_LEN-1;i>=0;i--){
fibonacci_memento(i);
}
end=clock();
printf("\nruntime=%ld-%ld\n",end,start);
return 0;
}
typedef struct {
int state;
} Memento;
typedef struct {
int state;
Memento* (*save)(void);
} Originator;
Memento* save(Originator* self) {
Memento* m = malloc(sizeof(Memento));
m->state = self->state;
return m;
}
// 使用
Originator originator = { .state = 100, .save = save };
Memento* m = originator.save(&originator);
printf("Saved state: %d\n", m->state); // 输出 100