一、一只青蛙一次可以跳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, tiaofa(n)); printf(" 你想继续吗(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)