计算C#中的平方和

时间:2017-04-27 20:27:45

标签: c#

我有以下代码来计算平方和。逻辑看起来不错,但它不是我正在寻找的输出。

我输入的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; 

        }
    }

1 个答案:

答案 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命令一次推进程序一行代码,看看究竟发生了什么。

debugger example

其他一些提示(与您发布的问题无关):

  • 您应该对int.TryParse()进行错误检查。
  • else if (value == 1)中的Squares()条件无用:它的正文永远不会执行,因为它来自更广泛的条件if (value > 0)