一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶(n为正整数)总共有多少种跳法。
数据范围:1 \le n \le 201≤n≤20
进阶:空间复杂度 O(1)O(1) , 时间复杂度 O(1)O(1)
输入描述:
本题输入仅一行,即一个整数 n
输出描述:
输出跳上 n 级台阶的跳法
我总共写了3个方法
第一个方法动态规划,因为刚学动态规划不知道是不是动态规划,下面几个方法内存和运行速度基本一样
#include<stdio.h>
#include<stdlib.h>
int main(void){
int n;
int *dp;
scanf("%d",&n);
dp=(int*)malloc(sizeof(int*)*(n+1));
dp[1]=1;
for(int i=2;i<=n;i++){
dp[i]=dp[i-1]*2;
}
printf("%d",dp[n]);
free(dp);
return 0;
}
第二个方法循环
#include<stdio.h>
#include<stdlib.h>
int main(void){
int n;
int nums=1;
scanf("%d",&n);
//dp=(int*)malloc(sizeof(int*)*(n+1));
for(int i=2;i<=n;i++){
nums*=2;
}
printf("%d",nums);
return 0;
}
第三个递归
#include<stdio.h>
int func(int n);
int main(void){
int n,nums;
scanf("%d",&n);
nums=func(n);
printf("%d\n",nums);
return 0;
}
int func(int n){
if(n==1)
return 1;
else
return 2*func(n-1);
}