正在自学C#,有一个问题弄不清楚,讨教一下。
一个汉诺塔求操作步数,输入层数,然后得到答案。本人试着写了一下,验证了一下发现结果都对。但是程序具体的计算流程还是搞不清楚,例如本人假如输入的层数是4的话,结果不应该是 1+6+4+2=13吗?求指导答。
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{
Calculator x = new Calculator();
Console.WriteLine(“Please input a number:”);
int num = Convert.ToInt32(Console.ReadLine());
Console.Write(“The answer is:”);
ulong answer = x.claVar(num);
Console.WriteLine(answer);
Console.ReadKey();
}
}
class Calculator
{
public ulong claVar(int a)
{
ulong result = 0;
if (a == 1)
{
result = 1;
}
else
{
result = 1+ 2*claVar(a-1);
一个汉诺塔求操作步数,输入层数,然后得到答案。本人试着写了一下,验证了一下发现结果都对。但是程序具体的计算流程还是搞不清楚,例如本人假如输入的层数是4的话,结果不应该是 1+6+4+2=13吗?求指导答。
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{
Calculator x = new Calculator();
Console.WriteLine(“Please input a number:”);
int num = Convert.ToInt32(Console.ReadLine());
Console.Write(“The answer is:”);
ulong answer = x.claVar(num);
Console.WriteLine(answer);
Console.ReadKey();
}
}
class Calculator
{
public ulong claVar(int a)
{
ulong result = 0;
if (a == 1)
{
result = 1;
}
else
{
result = 1+ 2*claVar(a-1);
}
return result;
}
}
}
解决方案
40
class Calculator { public ulong claVar(int a) { Debug.Print("input:a={0}", a); ulong result = 0; if (a == 1) { result = 1; } else { result = 1 + 2 * claVar(a - 1); } Debug.Print("output:【a={0}, result={1}】", a, result); return result; } }