美文网首页
递归、迭代、回溯

递归、迭代、回溯

作者: 什锦甜 | 来源:发表于2018-06-09 22:50 被阅读64次

递归(Recursion)

递归:一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量。
递归必须包括两个部分:1)递归终止条件;2)递归过程。
它分为两个阶段:
1)递推:把复杂的问题的求解推到比原问题简单一些的问题的求解;
2)回归:当获得最简单的情况后,逐步返回,依次得到复杂的解.
利用递归可以解决很多问题:如背包问题,汉诺塔问题。
例:斐波那契数列为:0,1,1,2,3,5...

//fib(0)=0;
//fib(1)=1;
//fib(n)=fib(n-1)+fib(n-2);
int fib(int n)  
{  
   if(0 == n)  
       return 0;  
   if(1 == n)  
       return 1;  
   if(n > 1)  
       return fib(n-1)+fib(n-2);  
}

迭代(Iteration)

迭代:利用变量的原值推算出变量的一个新值。如果递归是自己调用自己的话,迭代就是A不停的调用B。
递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换。能用迭代的不用递归,递归调用函数,浪费空间,并且递归太深容易造成堆栈的溢出。

//这是递归  
int funcA(int n)  
{  
    if(n > 1)  
       return n+funcA(n-1);  
    else   
       return 1;  
}  
//这是迭代  
int funcB(int n)  
{  
    int i,s=0;  
    for(i=1;i<n;i++)  
       s+=i;  
    return s;  
}

回溯法

回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。

相关文章

  • 递归(迭代、递归、回溯)

    递归的本质: 是指一种通过重复将问题分解为同类的子问题而解决问题的方法,其核心思想是分治策略。 递归分为两个过程,...

  • 递归、迭代、回溯

    递归(Recursion) 递归:一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化...

  • 递归、迭代、回溯、广度和深度优先

    在学习算法的时候,经常碰到递归、迭代、回溯、广度优先和深度优先算法,可是回溯使用了递归,深度优先也使用了递归,广度...

  • 深度优先搜索

    深度优先搜索思路 深度优先搜索 = 回溯法可以通过遍历或者分治法的思想实现深度优先搜索而递归和迭代 (非递归)两种...

  • 迭代与递归(基础版)

    问题: 1.迭代 2.递归 通过实验可知,迭代运行速度比递归要快 用递归实现阶乘运算 迭代和递归的区别 迭代与递归...

  • 8.30 leetcode刷题(2)

    递归和回溯:17 电话号码 思路:运用递归去实现回溯算法的思想。回溯算法本质上是一种暴力搜索,通过递归调用去实现,...

  • LeetCode之回溯算法

    回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯是递归的副产品,只要有递归就会有回溯。因为回溯的本质是穷举,穷...

  • 二叉树算法之0-计算二叉树的深度

    算法思想:使用递归 算法解析:分别递归左树和右树,递归到叶子节点时返回0,递归回溯时值+1,不断累积回溯的深度,每...

  • 递归,回溯

    什么叫递归:函数在运行时调用自己,这个函数就叫递归函数,调用的过程叫做递归; 递归的特点:1、递归函数必须要有终止...

  • 93. Restore IP Addresses

    基本上DFS就是回溯,回溯就是用递归来实现的;

网友评论

      本文标题:递归、迭代、回溯

      本文链接:https://www.haomeiwen.com/subject/iicasftx.html