题解:

 一开始我这个代码想到的是使用递归来求解
int digui(int n){
	int sum=0;
	if(n==1)
    sum=1;
	if(n==2)
	sum=2;
	if(n==1||n==2)
	return sum;
	if(n>2){
		return sum+=digui(n-1)+digui(n-2);
	} 
}但是后面发现明显超时,我试图用记忆化搜索来抢救一下,所以就有了下面代码
int digui(int n){
    if (memo[n] != -1) {
        return memo[n];
    }
    if (n == 1) {
        memo[n] = 1;
    } else if (n == 2) {
        memo[n] = 2;
    } else {
        memo[n] = digui(n-1) + digui(n-2);
    }
    return memo[n];
}
memset(memo, -1, sizeof(memo)); //main函数中使用这个进行了数组初始化确实,使用记忆化搜索保存了之后确实节约了一些时间,因为保存了一些中间结果1,避免了重复计算中间值,但是依旧是超时,处理的n<100,然后就翻起了题解。
然后就发现了大家在



















