zoukankan      html  css  js  c++  java
  • 递推算法

    好久没更过博客了,,今天简单翻了翻递推,,,发现不用心是根本看不懂的,目前我也只知道皮毛;

    首先是一个形式(来自万能的校本教材),


    void rec(形参列表)
    
    {
    
        if(test)  return;//边界条件
    
        rec(形参列表);//递归调用
    
        语句序列2        //递归返还段(回溯)
    
    }

    递推的示例很著名的有一个是斐波那契数列,数列第0个是0,第一个是1,以后的每一个是前两项的和;

    首先上一发斐波那契数列的代码

    #include<iostream>
    #include<algorithm>
    #include<string>
    using namespace std;
    int fib(int n)
    {
    	if(n<1)
    		return -1;
    	if(n==1||n==2)
    		return 1;
    	return fib(n-1)+fib(n-2);
    }
    int main()
    {
    	int n;cin>>n;
    	cout<<fib(n)<<endl;
    	return 0;
    }
    嗯,此程序手打,边界条件就是n<1,小于1就没法继续往下判断了嘛,然后下面n==1和n==2也一样,但要注意,n=0的时候下标是1,所以就要减1,但n==1和n==2的时候,下表非零,所以返回1,

    从这个代码,最直接的反应就是,递归真的很慢。。。超过50就超过1s了,更不要说后面

    再上一发汉诺塔的代码

    #include <iostream>
    #include <cstdio>
     using namespace std;
    void hannoi (int n, char from, char buffer, char to)
    {
        if (n == 1)
        {
            cout << "Move disk " << n << " from " << from << " to " << to << endl;
     
        }
        else
        {
            hannoi (n-1, from, to, buffer);
            cout << "Move disk " << n << " from " << from << " to " << to << endl;
            hannoi (n-1, buffer, from, to);
        }
    }
     
    int main()
    {
        int n;
        cin >> n;
        hannoi (n, 'A', 'B', 'C');
        return 0;
    }
    这个代码转自某大牛的空间,现在我也不是很懂http://www.cricode.com/304.html,先马克,以后再看

  • 相关阅读:
    工作
    失败
    理想和一些未来的计划
    安静
    重新开始
    如何度过周末
    放假
    WPF学习笔记-数据采集与监控项目01-登录界面
    VS2017-断点感叹号问题,调试代码显示“当前无法命中断点,还没有为该文档加载任何符号”
    WPF-MVVM模式-表现层的UI框架【学习笔记】
  • 原文地址:https://www.cnblogs.com/supersumax/p/5882468.html
Copyright © 2011-2022 走看看