青蛙跳台阶
一、一只青蛙一次可以跳1级台阶,也可以跳2级台阶,计算该青蛙跳上一个n级台阶总共有多少种跳法
第一种方法:(python)
def f(n):
t1=1
t2=2
s=0
for i in range(3,n+1):
s=t1+t2
t1=t2
t2=s
return s
def jump(n):
if n<=2:
return n
else:
return f(n)
n = eval(input())
s = jump(n)
print(s)
第二种方法:(python) 使用递归方法,这种方法虽然简单,但效率低,会超过时间上限
def tf(n):
if n==1:
return 1
elif n==2:
return 2
else:
return tf(n-1)+tf(n-2)
n = int(input('请输入台阶数(正整数):'))
tf_n = tf(n)
print(tf_n)
第三种方法:(Python)用循环代替递归,比第二种方法的代码效率上有较大的提升
def climbStairs(n):
if n==1 or n==2:
return n
a=1;b=2;c=3
for i in range(3,n+1):
c=a+b;a=b;b=c
return c
n = int(input('请输入台阶数(正整数):'))
climbStairs_n = climbStairs(n)
print(climbStairs_n)
第四种方法:(python)利用组合数公式

def climbStairs(n):
def fact(n):
result=1
for i in range(1,n+1):
result*=i
return result
total=0
a=int(n/2+1)
for i in range(a):
total+=fact(i+n-2*i)/fact(i)/fact(n-2*i)
return total
n = int(input('请输入台阶数(正整数):'))
climbStairs_n = climbStairs(n)
print(climbStairs_n)
第五种方法:(C语言)
# include <stdio.h>
int tiaofa(int n)
{
int i, tf1, tf2, tf3;
tf1 = 1;
tf2 = 2;
if (n == 1)
tf3 = 1;
else if (n ==2)
tf3 = 2;
else
{
for (i=3; i<=n; i++)
{
tf3 = tf1 + tf2;
tf1 = tf2;
tf2 = tf3;
}
}
return tf3;
}
int main(void)
{
int n;
char ch;
do
{
printf("请输入台阶数(正整数):");
scanf("%d", &n);
printf("%d个台阶有%d种跳法。\n", n, tiaofa(n));
printf("\n你想继续吗(Y/N):");
flushall();
scanf("%c", &ch);
} while (ch=='y' || ch=='Y');
return 0;
}

二、一只青蛙一次可以跳上1级台阶,可以跳上2级台阶,.......,也可以跳上n级台阶,计算该青蛙跳上一个n级台阶总共有多少种跳法
def jumpFloorII(number):
if number == 0:
return 0
if number == 1:
return 1
a = 1
ret = 1
for i in range(2,number+1):
ret = 2 * a
a = ret
return ret
number = int(input('请输入台阶数(正整数):'))
climbStairs_n = jumpFloorII(number)
print(climbStairs_n)

浙公网安备 33010602011771号