思维还是跟不上呀,这么简单的递归,尽让想不出来,更别说其他的方法啦。要总结结果,然后在过程中看到规律呀。先用简单的方法做出来吧。
int climbStairs(int n)
{
if (n == 1) {
return 1;
}
if (n == 2) {
return 2;
}
return climbStairs(n-1) + climbStairs(n-2);
}
// 这个算法会执行超市
int _climb(int n,int *arr)
{
if (arr[n]!= 0) return arr[n];
// 记录已经算过的值
arr[n] = _climb(n-1,arr) + _climb(n-2,arr);
return arr[n];
}
int goodClimbStairs(int n)
{
if (n < 0) return 0;
if (n <= 2) return 2;
// C 库函数 **void *calloc(size_t nitems, size_t size)** 分配所需的内存空间,并返回一个指向它的指针。**malloc** 和 **calloc** 之间的不同点是,malloc 不会设置内存为零,而 calloc 会设置分配的内存为零。
int *arr = (int*)calloc(n,sizeof(int));
arr[1] = 1;
arr[2] = 2;
return _climb(n,arr);
}
int main() {
int res = climbStairs(10);
printf("%d",res);
return 0;
}