递推算法

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

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


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,先马克,以后再看

转载于:https://www.cnblogs.com/supersumax/p/5882468.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值