zoukankan      html  css  js  c++  java
  • 上楼梯问题,斐波那契数列

    问题描述:

    有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或者二级,要走上m级,共有多少走法?注:规定从一级到一级有0种走法。给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100。为了防止溢出,请返回结果Mod 1000000007的值。

    算法思路:这道题其实就是斐波那契数列的应用,因为可以走一步,又可以走两步,开始在第一层台阶。所以,上第二层台阶,有1种方法,上第三层台阶,有2种方法,上后一层,可以通过前一层再走1步,前两层再走2步.所以,就是f(x)= f(x-1)+f(x-2)

    public class GoUpstairs {
    	//递归
    	public static int countWays(int n)
        {
            if(n == 1)
                return 0;
            if(n == 2)
                return 1;
            if(n == 3)
            	return 2;
            if(n > 3)
            	return  countWays(n-1) + countWays(n-2);
            return 0;
    
        }
    	//迭代
    	 public static int countWays2(int n)
    	    {
    	        int[] result = new int[100];
    	        result[1] = 0;
    	        result[2] = 1;
    	        result[3] = 2;
    	        for(int i = 4; i <= n; i ++)
    	        {
    	        	result[i] = result[i-1]+result[i-2];
    	        }
    	        return result[n];
    	    }
    	 public static void main(String[] args) 
    	 {
    		 
    		System.out.println(countWays(4));
    		System.out.println(countWays2(4));
    	 }
    }
    

    斐波那契额数列

    public class Fibonacci 
    {
    	//递归
    	public int fibonacciSequence(int n)
    	{
    		if(n == 1 || n == 2) return 1;
    		if(n > 2) return fibonacciSequence(n - 1) + fibonacciSequence(n - 2);
    		return 0;
    	}
    	
    	//迭代
    	public int fibonacciSequence2(int n)
    	{
    		int a = 1, b = 1, sum = 0;
    		if(n == 1 || n == 2) return 1;
    		for(int i = 3; i <= n; i ++)
    		{
    			sum = a + b;
    			a = b;
    			b = sum;
    		}
    		return sum;
    	}
    }
    

      

  • 相关阅读:
    iOS有用的三方库和高效工具记录
    正则表达式
    Exception Type & Exception Code
    信鸽推送(XGPush)
    在vue中使用animate.css
    vue 中父子组件传值:props和$emit
    预编译scss以及scss和less px 转rem
    ES6箭头函数及模版字符串
    移动端页面a input去除点击效果及pc端切换
    vue2搭建简易spa
  • 原文地址:https://www.cnblogs.com/masterlibin/p/5721407.html
Copyright © 2011-2022 走看看