【问题标题】:Recursive subtract递归减法
【发布时间】:2019-10-02 03:55:03
【问题描述】:

我正在尝试编写用于减数的递归函数。

我的起始数字是 33,我想用 X 递归减去这个数字。X 可以是任何数字,但为了这个目的,让它为 1,所以结果应该是这样的:

33 32 31 30 29 ....

33 - 1 = 32 - 1 = 31 - 1 = 30 - 1 = 29...

递归函数应该将减去的值返回给主函数。

到目前为止,我已经这样做了:

void Main()
{
   double x = 1.0;
   for (int i=0; i<=10; i++)
   {
        double res = calc(33, x);
        Console.WriteLine(res);
    }
}

 static double calc(double val, double roc)
 {
      double c = 0;

      c = val + roc;

      return c;             
  }

循环是每次调用函数并发送数字 33,但结果始终相同。如何从 calc() 方法中返回值并将该值用于下一次减法?

【问题讨论】:

  • 递归减法是int sub(int a, int b) =&gt; b == 0 ? a : b &gt; 0 ? sub(a-1, b-1) : sub(a+1, b+1);

标签: c# recursion


【解决方案1】:

我不明白您在这里要做什么,而且您的调用不是递归的。递归调用是指方法调用自身。要回答有关如何在下一次迭代中使用计算值的问题,您需要执行以下操作。

void Main()
{
   double x = 1.0;
   double res = 33
   for (int i=0; i<=10; i++)
   {
        res = calc(res, x);
        Console.WriteLine(res);
    }
}

 static double calc(double val, double roc)
 {
      double c = 0;

      c = val + roc;

      return c;             
  }

【讨论】:

  • 我刚开始使用递归,但似乎我把事情放在了完全错误的方式上。所以我所做的这不是递归......
【解决方案2】:

既然你提到了递归,这里是你使用递归方法的相同逻辑。

static void Main(string[] args)
{
    var result = calc(33, 1, 10);

    Console.WriteLine(result);
    Console.ReadLine();
}

static double calc(double startingValue, double valueToSubtract, int numberOfTimes)
{
    if (numberOfTimes == 0)
        return startingValue;
    return calc(startingValue - valueToSubtract, valueToSubtract, numberOfTimes - 1);
}

【讨论】:

    【解决方案3】:

    如果你想用递归来实现上面的难过,那么你可以这样做,

    class Program
    {
        static void Main()
        {
            double x = 1.0;
            double res = 33;
            calc(res, x);
        }
    
        static void calc(double val, double roc)
        {
            Console.WriteLine(val);
            if (val == 1)
                return;
            val = val - roc;
            calc(val, roc);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-23
      • 2020-08-14
      • 2014-05-08
      • 1970-01-01
      • 2013-04-12
      • 2021-02-09
      相关资源
      最近更新 更多