阶乘函数
#include <iostream>
using namespace std;
//阶乘函数 先搞懂其函数
int factorial(int n)
{
if( 1==n)
return 1;
return n*factorial(n-1);
}
int main()
{
cout << factorial(3);
}
斐波那契数列
#include <iostream>
using namespace std;
int fib(int n)
{
if( 0 == n || 1==n)
return n;
else
{
return fib(n-1) + fib(n-2);
}
}
int main()
{
cout << fib(6) << endl;
}
/
汉诺塔
先从最简单的情况入手,分析一个环的情况
然后在分析两个环的情况.
根据两个环的代码
hanoi( n-1,a,c,b );
cout << n << "->" << c << endl;
hanoi(n-1,a,b,c);
找出规律:void hanoi(int n, char a, char b, char c )
A是要移环的柱 ,c是要把环移到的柱
再分析三个环的情况,先把2个环移到B柱,再把自己移到c柱,再把B柱的环移到c柱.
所以,修改代码如下
hanoi( n-1,a,c,b );
cout << n << "->" << c << endl;
hanoi(n-1,b,a,c);
世界很简单,只是我们把他搞复杂了.
注意:解决问题首先要找到顺序.
解决问题的根本方法:使事物越分析越简单.
抽象是使事物越分析越简单的方法之一.抽象之一,找出规律.
// 二个环的情况.cpp
#include <iostream>
using namespace std;
void hanoi(int n, char a, char b, char c )
{
//二个环的情况
// 1 ->b, 2->c, 1->c
if( 1 ==n )
{
cout << n << "-> " << c << endl;
return;
}
hanoi( n-1,a,c,b );
cout << n << "->" << c << endl;
hanoi(n-1,a,b,c);
}
int main()
{
hanoi(2, 'A','B','C');
}
///
//三个环及以上.cpp
#include <iostream>
using namespace std;
void hanoi(int n, char a, char b, char c )
{
//三个环的情况
// 就是先将上两个环移到B,将自己移到C,再将那二个环移到C
// 所以,在两个环程序的基础上,稍加改动,就可以实现三个环的移动了.
// 1 ->b, 2->c, 1->c
if( 1 ==n )
{
cout << n <<" :"<<a << "-> " << c << endl;
return;
}
hanoi( n-1,a,c,b );
cout << n << " :"<< a << "->" << c << endl;
hanoi(n-1,b,a,c);
}
int main()
{
hanoi(3, 'A','B','C');
}
///