我有以下代码来计算平方和。逻辑看起来不错,但它不是我正在寻找的输出。
我输入的int值为3并得到以下响应:
1的平方和是1
2的平方和是5
3的平方和是14
我想在输出中显示的只是我输入的值。 " 3的平方和是14"
我在这里做错了什么?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Lab4
{
class Program
{
static void Main(string[] args)
{
Statistics();
}
static void Statistics()
{
SumofSquares();
Console.ReadLine();
}
static void SumofSquares()
{
int num;
Console.Write("Enter an int: ");
string input = Console.ReadLine();
int.TryParse(input, out num);
Squares(num);
}
static long Squares(long value)
{
long totalSum;
if (value > 0)
{
totalSum = Squares(value - 1) + (value*value);
}
else if (value == 1)
{
totalSum = 1;
}
else
{
totalSum = 0;
}
return totalSum;
}
}
答案 0 :(得分:2)
您发布的代码根本不打印The sum of squares for X is Y
,但根据您描述的行为,我假设您曾在Squares()
方法中使用过print语句。由于此方法为recursive,因此将为每个嵌套调用执行此类print语句。
相反,在最外面的Squares()
调用返回时获取最终结果后的print语句。即,SumofSquares()
:
static void SumofSquares()
{
int num;
Console.Write("Enter an int: ");
string input = Console.ReadLine();
int.TryParse(input, out num);
long result = Squares(num);
Console.WriteLine("The sum of squares for {0} is {1}", num, result);
}
花一些时间学习how to use the debugger in Visual Studio,你会得到很好的服务。要在您认为不应该执行print语句时找出原因,请在语句上设置断点。触发断点时,可以使用“局部”窗口查看范围内所有变量的当前值,并且可以使用“调用堆栈”窗口查看调用当前方法的内容(以及调用该方法的内容,等等)。 / p>
这是截图。调用堆栈显示Squares()
中的递归。从这里你可以使用Step Over命令一次推进程序一行代码,看看究竟发生了什么。
其他一些提示(与您发布的问题无关):
int.TryParse()
进行错误检查。else if (value == 1)
中的Squares()
条件无用:它的正文永远不会执行,因为它来自更广泛的条件if (value > 0)
。