基础算法整理(1)——递归与递推

       程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。——摘自百度百科

       递推算法是一种用若干步可重复的简运算(规律)来描述复杂问题的方法.
递推是序列计算机中的一种常用算法。它是按照一定的规律来计算序列中的每个项,通常是通过计算机前面的一些项来得出序列中的指定象的值。其思想是把一个复杂的庞大的计算过程转化为简单过程的多次重复,该算法利用了计算机速度快和不知疲倦的机器特点。——还是摘自百度百科
      简单来说,关于递推和递归,概念如下:
void digui()
{
    if(你不懂)    digui();
    if(你懂了)    return  hehe;
}
void ditui()
{
   if(你没懂)  ditui();
   if(你懂了)  cout<<"hehe";
}

怎么样,用简洁明快的方法就能让你明白算法的真谛是不是很爽hhhhh

递归递推作为基础算法其实并不难,但还是有必要举一些例题来看看= =

1.

小猴子第一天摘下若干桃子,当即吃掉一半,又多吃一个.第二天早上又将剩下的桃子吃一半,又多吃一个.以后每天早上吃前一天剩下的一半另一个.到第10天早上猴子想再吃时发现,只剩下一个桃子了.问第一天猴子共摘多少个桃子?

= =这踏马其实就是一个口算题,放在这里只是为了加深算法印象

2.

有雌雄一对兔子,假定过两个月便可繁殖雌雄各一的一对小兔子。问过n个月后共有多少对兔子?

 这是著名的斐波那契数列= =递推必刷题之一,当然还有很多关于这道题的难题,暂时不一一列举

3.角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。 如:输入22, 输出

 22  11  34  17  52  26  13  40  20  10  5  16  8  4  2  1 

     STEP=16

= -简单递推不解释。。。。

 

有人会问,要这么多水题来干嘛?我会说:水题不水永远不知道这是水题= =

难题肯定有,只是太多太常见,找UVA随便打几个数就是一堆= -

由于本次算法简单粗暴,所以详解略少,整理动态规划的时候我会再搞出来一点递推的东西。

posted on 2016-04-12 20:04  浅隐听寒  阅读(2749)  评论(0编辑  收藏  举报