zoukankan      html  css  js  c++  java
  • 递推和递归

    递推和递归

    递推

    递推犹如斐波那契数列:f(0) = 1, f(1) = 1;

    f(n) = f(n-1) + f(n-2);

    1 int i = 0;
    2 long fib[NUM] = {1,1};
    3 f(i=0; i<NUM; i++){
    4     fib[i] = fib[i-1] + fib[i-2];
    5 }

    注意这里只是循环没有自己调用自己。

    递归犹如汉诺塔:

    当A塔上有两个盘子是,先将A塔上的1号盘子(编号从上到下)移动到B塔上,再将A塔上的2号盘子移动的C塔上,最后将B塔上的小盘子移动到C塔上。

    A塔上有三个盘子,B塔会有两个正常的盘子(当然要借助C塔),然后,将最大的盘子移到C塔,然后将盘子移动到C塔上(借助A塔)。

    同理A塔上有N个盘子,B塔上有N-1个正常的盘子(借助C塔),然后,将N号盘子移动到C塔,最后将盘子移到C塔(借助A塔)。

    赤裸裸的递归,先来介绍一个函数,如下所示。

    hanoi(N,from,depend_on,to);//先将初始塔的前n个盘子借助目的塔移动到借用塔上  

     所以汉诺塔核心代码如下。

     1 hanoi(int n,char from, char depend_on, char to)
     2 {
     3     if(n==1)
     4         printf("%d\t %c->%c",n, from, to);
     5     else
     6         {
     7             hanoi(n-1,from, to, depend_on);//先将初始塔的前n-1个盘子借助目的塔移动到借用塔上 
     8             printf("%d\t %c->%c",n, from, to);//将剩下的一个盘子移动到目的塔上  
     9             hanoi(n-1,denpend_on,from,to);//最后将借用塔上的n-1个盘子移动到目的塔上  
    10         }
    11 }

    自己调用自己了参见第7行和第九行。

  • 相关阅读:
    hadoop生态--ElasticSearch--ES操作
    Haoop生态--ElasticSeaarch(1)--ES预备知识(全文检索的概念、Lucence、倒排索引)
    hadoop生态--Hive(2)--Hive的使用方式
    hadoop生态--Zookeeper
    gsoap使用
    set容器
    如何杀死defunct进程
    关于多态
    数组类型与函数指针基本语法知识
    syslog日志
  • 原文地址:https://www.cnblogs.com/hellowu/p/3094982.html
Copyright © 2011-2022 走看看