Skip to content

Instantly share code, notes, and snippets.

@hjzheng
Last active January 2, 2020 02:41
Show Gist options
  • Save hjzheng/4ccd1d49d15b813e60141b2c059d7ba8 to your computer and use it in GitHub Desktop.
Save hjzheng/4ccd1d49d15b813e60141b2c059d7ba8 to your computer and use it in GitHub Desktop.
递归+分治+回溯+动态规划

1.递归

function recur(level, params...) {
  // 终止条件
  if (level < maxLevel) {
    process_result
    return
  }
  
  // 处理当前层
  
  // 进入下一层 (注意进入下一层,参数是复制,如果是引用类型,copy 一份,如果不能 copy,就要清理状态了)
  recur(level+1, params...)
  
  // 如果有必要,需要清理状态
}

2.分治

def divide_conquer(problem, param1, param2, ...): 
  # recursion terminator 
  if problem is None: 
	print_result 
	return 

  # prepare data 
  data = prepare_data(problem) 
  subproblems = split_problem(problem, data) 

  # conquer subproblems 
  subresult1 = self.divide_conquer(subproblems[0], p1, ...) 
  subresult2 = self.divide_conquer(subproblems[1], p1, ...) 
  subresult3 = self.divide_conquer(subproblems[2], p1, ...) 
  …

  # process and generate the final result 
  result = process_result(subresult1, subresult2, subresult3, …)
	
  # revert the current level states

3.回溯 类似于分治

4.动态规划定义

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment