• 上楼梯问题,斐波那契数列


    问题描述:

    有一楼梯共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;
    	}
    }
    

      

  • 相关阅读:
    C语言PRO2
    pro5
    自我介绍
    李喆第5次作业
    李喆的作业
    一个队列类的实现(比delphi自带的速度快70倍)
    关于 IHTMLDocument4 在 Delphi7.0 中不能编译的的解决方法
    高吞吐量的一个日志函数类_用于IOCP (Delphi)
    PostThreadMessage在线程中应用(以多线程网站数据采集为例)
    微软企业库5 加密篇
  • 原文地址:https://www.cnblogs.com/masterlibin/p/5721407.html
Copyright © 2020-2023  润新知