猴子爬山
Description
一个猴子在一座不超过30级的小山上爬山跳跃,猴子上山一步可跳1级或跳3级,试求上山有多少种不同的爬法
Input
多组测试数据,每组输入1个整数n,表示山的台阶数
Output
对于输入的整数n求出多少种爬法
Sample Input
30
Sample Output
58425
设爬K级台阶的不同爬法有f(K)种?
则:
f(1) = 1;即1=1
f(2) = 1;即2=1+1
f(3) = 2;即3=1+1+1;3
f(4) = 3;即4=1+1+1+1;3+1;1+3(f(4)=f(3)+f(1))
、、、
f(7)=f(7-1)+f(7-3)=f(6)+f(4)
则递推关系为:f(k)=f(k-1)+f(k-3);
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int f(int n);
int main(int argc, char *argv[]) {
int n;
while(scanf("%d",&n)!=EOF){
printf("%d\n",f(n));
}
return 0;
}
int f(int n){
int zh;
if(n==1||n==2) zh=1;
if(n==3) zh=2;
if(n>3) zh=f(n-1)+f(n-3);
return zh;
}