深度优先搜索(DFS)与广度优先搜索(BFS)详解

您所在的位置:网站首页 深度优先搜索的算法 深度优先搜索(DFS)与广度优先搜索(BFS)详解

深度优先搜索(DFS)与广度优先搜索(BFS)详解

2024-06-19 00:09| 来源: 网络整理| 查看: 265

原文来自《挑战程序设计竞赛》

深度优先搜索(DFS)和宽度优先搜索(BFS)都是常见的搜索算法。在学习DFS和BFS之前,我们首先得知道递归函数的概念。

1. 递归函数

通俗地讲,一个函数自己调用自己的行为就叫递归,该函数就叫递归函数。如计算一个数的阶乘,就可以利用递归来实现。 我们知道一个数的阶乘可以等于这个数乘上这个数减1的阶乘,如 3 ! = 3 × 2 ! 3!=3\times2! 3!=3×2!,便有递推式:

n ! = n × ( n − 1 ) ! n!=n\times(n-1)! n!=n×(n−1)!

规定 0 ! = 1 0!=1 0!=1,便可以很容易地编写出如下函数:

int f(int n) { if (n == 0) { return 1; } return n * f(n-1); }

递归函数必须要有循环退出的条件,在这段代码中, n = = 0 n==0 n==0就是循环退出的条件。如果没有循环退出的条件,那么函数就会无限地调用下去,导致程序崩溃。 下面是计算阶乘的递归过程: 计算阶乘的递归过程

类似地,我们可以试着编写计算斐波那契数列的某一项的递归函数。斐波那契数列的定义如下:

设数列 { a n } , \{a_n\}, {an​},若满足 a 0 = 0 a_0=0 a0​=0, a 1 = 1 a_1=1 a1​=1, a n = a n − 1 + a n − 2 ( n ≥ 2 ) a_n=a_{n-1}+a_{n-2}(n\geq2) an​=an−1​+an−2​(n≥2),则称数列 { a n } \{a_n\} {an​}为斐波那契数列

根据定义,我们知道斐波那契数列的递推式为 a n = a n − 1 + a n − 2 a_n=a_{n-1}+a_{n-2} an​=an−1​+an−2​,循环退出的条件为 n = 0 n=0 n=0或 n = 1 n=1 n=1,这样就可以很容易地写出该递归函数:

int fib(int n) { if (n n; int res = fib(n); cout n; for (int i = 0; i > a[i]; } cin >> k; if (dfs(0,0)) { cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3