回溯和递归的区别

一、概念
递归:程序调用自身的编程技巧称为递归( recursion)。
回溯:回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。
二、回溯和递归的区别
递归是一种算法结构,递归会出现在子程序中,形式上表现为直接或间接的自己调用自己;而回溯是一种算法思想,它是用递归实现的,回溯的过程类似于穷举法,但回溯有“剪枝”功能,即自我判断过程。
举个通俗的例子就是:
我们在路上走着,前面是一个多岔路口,因为我们并不知道应该走哪条路,所以我们需要尝试。尝试的过程就是一个函数。
如果我们选择了一个方向,后来发现又有一个多岔路口,这时候又需要进行一次选择。所以我们需要在上一次尝试结果的基础上,再做一次尝试,即在函数内部再调用一次函数,这就是递归的过程。
这样重复了若干次之后,发现这次选择的这条路走不通,这时候我们知道我们上一个路口选错了,所以我们要回到上一个路口重新选择其他路,这就是回溯的思想。