台阶问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
普通版
代码如下:
#include <stdio.h>
int f( int n );
int main()
{
int n;
scanf("%d", &n);
printf("%d\n", f(n));
return 0;
}
int f(int n){
if(n ==1)
return 1;
else if(n == 0)
return 0;
else
return f(n-2)+f(n-1);
}
优化版
当台阶数n过多时,耗时长,所以这是我们就可以将前面求出来的n-1个台阶的方法数,保存到一个数组中,之后的计算直接相加即可。注意:数值过大,定义为长整形。
问题:
输入格式:
输入在第一行给出一个正整数N(≤100),是待求取的数的个数。随后N行,输入n个数字num。
输出格式:
对每一组输入num,在一行中输出Finonacci数列的第num项的值。
输入样例:
在这里给出一组输入。例如:
3
3
5
6
输出样例:
在这里给出相应的输出。例如:
2
5
8
代码如下:
#include <stdio.h>
long long f(long long n){
long long num1=1,num2=1,num;
if(n==1 ){
return 1;
}else{
for(int i=2;i<=n;i++){
num = num1+num2;
num1 = num2;
num2 = num;
}
return num;
}
}
int main()
{
int n[100];
int N;
scanf("%d",&N);
for(int i=1;i<=N;i++){
scanf("%d", &n[i]);
}
for(int i=1;i<=N;i++){
printf("%lld\n", f(n[i]));
}
return 0;
}