Recursion is an algorithm structure, backtracking is an algorithm idea.
Recursion
A recursion is to call the function itself in the function to solve the problem.
# General structure of recursion
void foo()
{
if(conditions)
{
///
return;
}
//call foo
foo();
}
Backtracking
Backtracking is the creation of a solution to a problem through various attempts, a bit like brute force, but unlike brute force it “pruns”.
Backtracking is a form of depth-first search (DFS). For a certain search tree (which records the path and state judgment), the main difference between backtracking and DFS is that backtracking does not retain the complete tree structure in the solving process, while depth-based search records the complete search tree.
To reduce storage space, in depth-first searches, flags are used to record visited states, which makes depth-first searches indistinguishable from backtracking.
# General structure of backtracking
void DFS(int current_status)
{
if(condition)
{
record or output
return;
}
for(i=0;i<n;i++) //traverse all the nodes of solution tree
{
Generate child parameters
if(condition)
{
dfs(child condition)
}
reocover global variables //(backtracking part)
}
}