class Towers
{
public static void Main()
{
towers(4, 'a', 'c', 'b');
Console.ReadLine();
} public static void towers(int n, char fromPeg, char toPeg, char auxPeg)
{
if (n == 1)
{
Console.WriteLine("move disk 1 from peg " + fromPeg + " to peg " + toPeg);
return;
} towers(n - 1, fromPeg, auxPeg, toPeg); Console.WriteLine("move disk " + n + " from peg " + fromPeg + " to peg " + toPeg); towers(n - 1, auxPeg, toPeg, fromPeg);
}
}这个程序分三个步骤完成,第一步,执行第一个递归函数,第二步执行输出,第三步执行第三个递归函数,第一步是要完成n-1个塔向B柱转移,分解为n-2个塔向c转移(函数1),再把n-1向b柱转移(输出语句2),再把n-2向b柱转移(函数3),这个思想能搞明白,但每次调用的参数规律不知是不是,第一个函数acb,abc,acb,abc……
第二个函数是bca,?
{
public static void Main()
{
towers(4, 'a', 'c', 'b');
Console.ReadLine();
} public static void towers(int n, char fromPeg, char toPeg, char auxPeg)
{
if (n == 1)
{
Console.WriteLine("move disk 1 from peg " + fromPeg + " to peg " + toPeg);
return;
} towers(n - 1, fromPeg, auxPeg, toPeg); Console.WriteLine("move disk " + n + " from peg " + fromPeg + " to peg " + toPeg); towers(n - 1, auxPeg, toPeg, fromPeg);
}
}这个程序分三个步骤完成,第一步,执行第一个递归函数,第二步执行输出,第三步执行第三个递归函数,第一步是要完成n-1个塔向B柱转移,分解为n-2个塔向c转移(函数1),再把n-1向b柱转移(输出语句2),再把n-2向b柱转移(函数3),这个思想能搞明白,但每次调用的参数规律不知是不是,第一个函数acb,abc,acb,abc……
第二个函数是bca,?
{
public static void Main()
{
towers(4, 'a', 'c', 'b');
Console.ReadLine();
} public static void towers(int n, char fromPeg, char toPeg, char auxPeg)
{
if (n == 1)
{
Console.WriteLine("move disk 1 from peg " + fromPeg + " to peg " + toPeg);
return;
} towers(n - 1, fromPeg, auxPeg, toPeg); Console.WriteLine("move disk " + n + " from peg " + fromPeg + " to peg " + toPeg); towers(n - 1, auxPeg, toPeg, fromPeg);
}
}这个程序分三个步骤完成,第一步,执行第一个递归函数,第二步执行输出,第三步执行第三个递归函数,第一步是要完成n-1个塔向B柱转移,分解为n-2个塔向c转移(函数1),再把n-1向b柱转移(输出语句2),再把n-2向b柱转移(函数3),这个思想能搞明白,但每次调用的参数规律不知是不是,第一个函数acb,abc,acb,abc……
第二个函数是bca,acb,bca,acb……
http://zhidao.baidu.com/question/5919332.html递归本来就是一种倒推的方式来逐步计算。
towers(4, ‘a’, 'c', 'b');
towers(3, ‘a’, 'b', 'c');
towers(2, ‘a’, 'c', 'b');
towers(1, ‘a’, 'b', 'c');
Console.WriteLine("move disk 1 from peg a to peg b");
Console.WriteLine("move disk 2 from peg a to peg b");
towers(1, ‘b’, 'c', 'a');
Console.WriteLine("move disk 1 from peg b to peg c");
...