fibonacci.c:为斐波那数列
climbStair.c:
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例 1:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶
示例 2:
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶
#include <stdio.h>
#include <stdlib.h>
// 递归,由于重复计算,n过大造成重复计算越多
int solutionFibonacci(int n)
{
if (n <= 0)
return 0;
else if (n <= 2)
return 1;
else
return solutionFibonacci(n - 1) + solutionFibonacci(n - 2);
}
int solutionFibonacci1(int n)
{
if (n <= 0)
return 0;
else if (n <=2)
return 1;
else
{
int *p = (int *)malloc(sizeof(int) * (n + 1));
p[1] = p[2] = 1;
int i;
for (i = 2;i <= n;++ i)
p[i] = p[i - 1] + p[i - 2];
int num = p[n];
free(p);
return num;
}
return 0;
}
int main()
{
int n;
scanf("%d",&n);
printf("第%d个斐波那数为%d\n",n,solutionFibonacci1(n));
}
#include <stdio.h>
#include <stdlib.h>
int mem[101];
int climbStairs(int n)
{
mem[1] = 1;
mem[2] = 2;
mem[3] = 3;
return fun(n);
}
int fun(int n)
{
if (n <= 3)
return mem[n];
else if (mem[n] != 0)
return mem[n];
return mem[n] = fun(n - 1) + fun(n - 2);
}
int main()
{
int n;
scanf("%d",&n);
printf("%d层楼梯有%d种方法\n",n,climbStairs(n));
}