# 什么是算法？

> 原文： [https://www.programiz.com/dsa/algorithm](https://www.programiz.com/dsa/algorithm)

#### 在本教程中，我们将借助示例学习什么算法。

算法是依次解决问题的一组明确定义的指令。

* * *

## 好的算法的质量

1.  输入和输出应精确定义。
2.  算法中的每个步骤都应清晰明确。
3.  在解决问题的许多不同方式中，算法应该是最有效的。
4.  算法不应该包含计算机代码。 相反，应以可以在不同编程语言中使用的方式编写算法。

* * *

## 算法实例

[将两个数字相加的算法](#add)

[在三个数字中查找最大的算法](#largest)

[查找二次方程式](#quadratic)的所有根的算法

[查找阶乘](#factorial)的算法

[检查素数的算法](#prime)

[斐波那契数列](#fab)的算法

* * *

## 编程中的算法示例

**编写一种算法，将用户输入的两个数字相加。**

```
Step 1: Start
Step 2: Declare variables num1, num2 and sum. 
Step 3: Read values num1 and num2\. 
Step 4: Add num1 and num2 and assign the result to sum.
        sum←num1+num2 
Step 5: Display sum 
Step 6: Stop

```

**编写一种算法来查找用户输入的三个不同数字中的最大数字。**

```
Step 1: Start
Step 2: Declare variables a,b and c.
Step 3: Read variables a,b and c.
Step 4: If a > b
           If a > c
              Display a is the largest number.
           Else
              Display c is the largest number.
        Else
           If b > c
              Display b is the largest number.
           Else
              Display c is the greatest number.  
Step 5: Stop

```

**编写算法来查找二次方程`ax^2 + bx + c = 0`的所有根。**

```
Step 1: Start
Step 2: Declare variables a, b, c, D, x1, x2, rp and ip;
Step 3: Calculate discriminant
         D ← b2-4ac
Step 4: If D ≥ 0
              r1 ← (-b+√D)/2a
              r2 ← (-b-√D)/2a 
              Display r1 and r2 as roots.
        Else     
              Calculate real part and imaginary part
              rp ← b/2a
              ip ← √(-D)/2a
              Display rp+j(ip) and rp-j(ip) as roots
Step 5: Stop             

```

**编写算法来查找用户输入的数字的阶乘。**

```
Step 1: Start
Step 2: Declare variables n, factorial and i.
Step 3: Initialize variables
          factorial ← 1
          i ← 1
Step 4: Read value of n
Step 5: Repeat the steps until i = n
     5.1: factorial ← factorial*i
     5.2: i ← i+1
Step 6: Display factorial
Step 7: Stop

```

**编写算法来检查用户输入的数字是否为质数。**

```
Step 1: Start
Step 2: Declare variables n, i, flag.
Step 3: Initialize variables
        flag ← 1
        i ← 2  
Step 4: Read n from the user.
Step 5: Repeat the steps until i=(n/2)
     5.1 If remainder of n÷i equals 0
            flag ← 0
            Go to step 6
     5.2 i ← i+1
Step 6: If flag = 0
           Display n is not prime
        else
           Display n is prime
Step 7: Stop 

```

**编写算法来找到直到项`≤ 1000`的斐波那契数列。**

```
Step 1: Start 
Step 2: Declare variables first_term,second_term and temp. 
Step 3: Initialize variables first_term ← 0 second_term ← 1 
Step 4: Display first_term and second_term 
Step 5: Repeat the steps until second_term ≤ 1000 
     5.1: temp ← second_term 
     5.2: second_term ← second_term + first_term 
     5.3: first_term ← temp 
     5.4: Display second_term 
Step 6: Stop

```