700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 算法! 有n步台阶 一次只能上1步或2步 共有多少种走法

算法! 有n步台阶 一次只能上1步或2步 共有多少种走法

时间:2021-08-08 20:08:03

相关推荐

算法! 有n步台阶 一次只能上1步或2步 共有多少种走法

有2种算法, 递归和循环迭代, 依次介绍并比较

1.递归

1步台阶, 一种走法, 即f(1)=1;

2步台阶, 2种走法, 一步加一步或是直接跨两步, 即f(2)=2

3步台阶, 最后一次要么跨1步,要么跨2步, 一共的走法为最后一次跨1步的走法f(3-1)加上最后一次跨2步的走法f(3-2), 即f(3)=f(2)+f(1)

n步台阶, 最后一次跨1步的走法f(n-1)加上最后一次跨2步的走法f(n-2), 即f(n)=f(n-1)+f(n-2)

public class StepCount {private static int f(int n) {if (n == 1 || n == 2) {return n;} else {return f(n - 1) + f(n - 2);}}public static void main(String[] args) {long startTime = System.currentTimeMillis(); //记录初始时间System.out.println(f(40));long endTime = System.currentTimeMillis();//记录终末时间System.out.println("所用时间: " + (endTime - startTime) + " 毫秒");}}

走40步台阶耗时256毫秒

2.循环迭代

private static int f(int n) {if (n == 1 || n == 2) {return n;}//初始化为走到第二级台阶的走法int one = 2;//初始化为走到第一级台阶的走法int two = 1;int sum = 0;for (int i = 3; i <= n; i++) {//最后跨两步+最后跨一步的走法sum = two + one;two = one;//之前到目标阶跨一步的走法变成到下一目标阶跨两步的走法one = sum;//之前到目标阶的走法变成到下一目标阶跨一步的走法}return sum;}

同样走40步台阶, 耗时0毫秒

递归与循环迭代的比较

递归简洁、易于理解, 但是浪费空间、效率低下(从图中看出相对耗时更久)

迭代正好反之, 不够简洁, 可读性较差, 但是效率更高, 不易造成堆栈溢出

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。