您的位置:首页 > 编程语言 > C语言/C++

c++学习日志20151207

2015-12-07 19:26 232 查看
递归

函数可以调用自己,递归的难点是观察出递推关系式,其次的由于递推对资源的利用并不高很容易超时,可以采用记忆搜索法;

下面给出我做过的两题。

汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。(百度百科)

Input

给出第一根柱子的圆盘个数N(N <= 20),你要做的就是找出最快将圆盘全部移到第三根柱子的方法,并将方法输出出来。

 

Output

 

如当N=3的时候,输出

13
12
32
13
21
23
13

每行两个数字表示将第一个数字的柱子的最上面的圆盘移动到第二个数字所表示的柱子上。


对于此题就是要猜想 第n个与第n-1个的关系 (犹如数学归纳法一样 起点 ,n=k ,n=k+1) 力图将所有的情况概况下来;

 下面给出我的代码

#include <iostream> 

using namespace std;

int a=1,b=2,c=3;

int g(int a,int b,int c)

{
cout<<a<<c<<endl;
return 0;

}

int f(int a,int b,int c, int n)

{
if(n==1)
{
cout<<a<<c<<endl;
return 0;
}

return f(a,c,b,n-1)+g(a,b,c)+f(b,a,c,n-1);

}

int main()

{
int n;
cin>>n;
f(a,b,c,n);
return 0;

}

 //貌似只有 有返回值的函数才可以递归。。。。。

下面一体 兔子问题

Description

TA家里养了一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月时就会变成成年兔子,从这个月起这对兔子每个月又生一对兔子,假如兔子都不死,问第n个月TA家里有多少只兔子?

Input

本体包含多组测试数据。

每组测试数据包含一个正整数n,表示需要计算的月数。

当n为-1时程序退出。

Output

每组测试数据的结果占一行。

每行输出当月TA家中的兔子数量。

此题要写出 数学递推式 就可以解决。
#include <iostream>

using namespace std;

int f(int n)

{
if(n==1||n==2) return 2;
if (n==3) return 4;
return f(n-1)+f(n-2);

}

 

int main()

{
int n;

    while(cin>>n&&n!=-1)
cout<<f(n)<<endl;
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: