学编程你不学算法?!小白入门系列01

1.什么是算法?

  • 算法是解决特定问题的一系列的执行步骤。

注意: 使用不同的算法,效率可能相差非常大。
比如求第n个斐波那契数(Fibonacci number)

2.什么是斐波那契数?

指的是这样一个数列:0、1、1、2、3、5、8、13、21、34……在数学上,斐波那契数列以如下被以递推的方法定义:
F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)
(就是前两个数相加等于第三个数)

  • 递归法代码如下:(待会有更好的解决方案
public class Fibonacci  {

	/**
	 * 斐波那契数0 1 1 2 3 5 8 13...
	 */
	public static int fib(int n) {
		//如果n是0或者1就输出他自己,前两个数是0和1
		if (n <= 1) return n;
		//否则就输出前两个数的和
		return fib(n - 1) + fib(n - 2);
	}
	public static void main(String[] args) {
		System.out.println(fib(0));
		System.out.println(fib(1));
		System.out.println(fib(2));
		System.out.println(fib(3));
		System.out.println(fib(4));
		//结果输出0 1 1 2 3
	}
}

弊端:如果输入60以上结果会迟迟不出来。

- 解决思路:0 1 1 2 3 5
  1. 第一步
    如果n<=1:前两项就等于自己本身,所以先定义first=0;second=1;
  2. 第二步
    如果n=2:需要前两个数加1次赋值给第三个数(从n=0开始)
    如果n=3:需要加2次
    如果n=4:需要加3次
    所以使用for循环,循环次数为n-1次
  3. 第三步
    前两个数的和(sum)要给下一个second
    比如1+2=3:1是first,2是second,3是和sum(下一个second
    下一次2+3=5:2是first,3是second
    最后上一个second是下一次循环的first ://first=second;

迭代法:

public static int f1(int n) {
		if (n <= 1) {
			return n;
		}
		//前两项就等于自己本身,所以先定义first=0;second=1;
		int first = 0;
		int second = 1;
		//循环次数为n-1次
		for (int i = 0; i < n - 1; i++) {
			//前两个数相加赋值给第三个数
			int sum = first + second;
			//上一次相加的第二个数是下一次相加的第一个数
			first = second;
			//上一次的和是下一次相加的第二个数
			second = sum;
		}
		return second;
	}

优势:秒算。
当然还有矩阵乘法优化等方法以后进阶系列讲

因为针对的是小白入门级别的,所以我讲的比较细,以后的系列一边看一边想肯定很容易想通的,加油!奥里给!

下一章讲**时间复杂度和空间复杂度**
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值