累死青蛙系列——青蛙跳台阶问题

(1)斐波那契数列

f(1) = 1

f(2) = 2

f(n) = f(n-1) + f(n-2)

function Fibonacci(n)
{
    // write code here
    var a=[0,1];
    if(n>1){
        for(var i=2;i<=n;i++){
            a[i]=a[i-1]+a[i-2];
        }
    }
    return a[n];
}

(2)青蛙跳台阶

青蛙每次只能跳1个或2个台阶,有n阶台阶,青蛙有多少种跳法?

这要倒过来想,当在第n阶台阶的前一步时,青蛙只有两种选择,1或2步,f(n) = f(n-1) + f(n-2)

这样就将题目转变成斐波那契数列了。

function jumpFloor(number)
{
    // write code here
    if(number<=0){
        return -1;
    }else if(number==1){
        return 1;
    }else if(number==2){
        return 2;
    }else{
        return jumpFloor(number-1)+jumpFloor(number-2);
    }
}

(3)变态青蛙跳台阶

青蛙每次能跳1个或2个,……n个台阶,有n阶台阶青蛙有多少种跳法?

这题同样可以倒过来考虑

f(n) = f(n-1) + f(n-2) + ……+f(2) +f(1) +f(n-n)

但是这样不容易找到规律。所以我们这次采取从正面开始。

f(1) = 1

f(2) = f(2-1) + f(2-2) = 2 ;                         需要假设 f(0) 次为1,其意义为 :有n阶台阶,青蛙采取直接跳了n个台阶的策略

f(3) = f(3-1) + f(3-2) + f(3-3) = 2f(2) = 4;

f(4) = f(4-1) + f(4-2) + f(4-3) + f(4-4) =2f(3)

大胆假设一下,f(n) = 2f(n-1) 这样是为了通过递归获取答案

function jumpFloor(number){
    if(number==0 || number ==1){
        return 1;
    }else{
        return jumpFloor(number-1)*2;
    }
}

原文地址:https://www.cnblogs.com/hiluna/p/9387599.html

时间: 2024-08-28 15:56:49

累死青蛙系列——青蛙跳台阶问题的相关文章

剑指offer源码系列-变态跳台阶

题目1389:变态跳台阶 时间限制:1 秒内存限制:32 兆特殊判题:否提交:1906解决:1102 题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入包括一个整数n(1<=n<=50). 输出: 对应每个测试案例, 输出该青蛙跳上一个n级的台阶总共有多少种跳法. 样例输入: 6 样例输出: 32 解法分析: 分析:用Fib(n)表示青蛙跳上n阶台阶的跳法数,青蛙

JavaScript算法系列之-----------------跳台阶(JS实现)

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 思路: (1)跳一级台阶 : 1             一种 (2)跳二级台阶 : 11/2        两种 (3)跳三级台阶 : 先跳一级还有两级台阶同情况(2)  记作=>    1 (2) 先跳两级还有一级台阶同情况(1)  记作=>    2 (1) 把这两种情况加起来就是跳三级台阶的一共可能 (2)+(1) (4)跳四级台阶 : 先跳一级还有三级台阶

斐波那契数列及青蛙跳台阶问题

题目1: 写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项. 斐波那契(Fibonacci)数列定义例如以下: f(n)=?????0,1,f(n?1)+f(n?2),n=0n=1n>2 效率非常低的解法: 递归解法(效率非常低) long long Fibonacci_Solution1(unsigned int n) { if(n <= 0) return 0; if(n == 1) return 1; return Fibonacci_Solution1(n - 1) +

青蛙跳台阶(Fibonacci数列)

问题 一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级.求该青蛙跳上一个n 级的台阶总共有多少种跳法. 思路 当n=1时,只有一种跳法,及f(1)=1,当n=2时,有两种跳法,及f(2)=2,当n=3时,可以从n=1直接跳到n=3,也可以从n=2直接跳到n=3,及f(3)=f(1)+f(2)=3...,所以可以使用递归,自顶向下,一步一步求解,但是仔细分析一下,如果n=10,需要求得f(9)和f(8),而f(9)=f(8)+f(7),f(8)=f(7)+f(6),可以很明显看到,求了重复的f(

青蛙跳台阶算法

一.问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共需要多少种跳法. 思路:首先考虑n等于0.1.2时的特殊情况,f(0) = 0   f(1) = 1  f(2) = 2 其次,当n=3时,青蛙的第一跳有两种情况:跳1级台阶或者跳两级台阶,假如跳一级,那么 剩下的两级台阶就是f(2):假如跳两级,那么剩下的一级台阶就是f(1),因此f(3)=f(2)+f(1)  当n = 4时,f(4) = f(3) +f(2),以此类推...........可以联想到F

Python算法题(一)——青蛙跳台阶

题目一(青蛙跳台阶): 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 分析: 假设只有一级台阶,则总共只有一种跳法: 假设有两级台阶,则总共有两种跳法: 假设有n级台阶,那么第一步就要分为跳一步和跳两步: 跳一步,那么接下来就是跳n-1: 跳两步,那么接下来就是跳n-2: 所以,总数可以认为是f(n-1)+f(n-2). 主要代码: def frog(num): if num <= 2: return num t1, t2 = 1, 2 for _

一只青蛙从第一级台阶跳到第n级,每次可以跳任意级,共有多少种跳法,并写出递推式

是斐波那契数列问题 假设f(n)是n个台阶跳的次数:(假设已经调到第n个台阶,最后一次是由哪个台阶跳上来的) f(n) = f(n-1)+f(n-2)+...+f(n-(n-1)) + f(n-n) == f(0) + f(1) + f(2) + f(3) + ... + f(n-2) + f(n-1) == f(n) = 2*f(n-1) 所以,可以得出递推式: 1 public static int jumpFloor(int n) { 2 if (n <= 0) 3 return 0; 4

剑指offer源码系列-跳台阶

这是一个斐波那契数列的变形 题目1388:跳台阶 时间限制:1 秒内存限制:32 兆特殊判题:否提交:3030解决:1226 题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入包括一个整数n(1<=n<=70). 输出: 对应每个测试案例, 输出该青蛙跳上一个n级的台阶总共有多少种跳法. 样例输入: 5 样例输出: 8 #include<iostream> #includ

JavaScript算法系列之-----------------变态跳台阶(JS实现)

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 思路:其实和跳台阶思路很像, (1)跳一级台阶 : 1             一种 (2)跳二级台阶 : 11/2        两种 (3)跳三级台阶 : 先跳一级还有两级台阶同情况(2)  记作=>    1 (2) 先跳两级还有一级台阶同情况(1)  记作=>    2 (1) 先跳三级台阶情况                             记作=>