【问题标题】:How to do a recursion function that receives an array, find the sum of it and the integers in the array that divide the sum如何做一个接收数组的递归函数,找到它的总和以及数组中除以总和的整数
【发布时间】:2021-03-25 11:21:30
【问题描述】:

我需要一些帮助才能在 C# 中创建递归函数。

该函数接收一个int 数组,它找到它的和并打印数组中除该和的所有数字。

您不能在函数内部创建循环或创建单独的循环。

我的想法是这样的,但它不起作用。

    static public void print(int[] array, int sumIndex = 0, int sum = 0,int devIndex = 0)
    {
        if (sumIndex < array.Length)
        {
             sum = sum + array[sumIndex];
             print(array, sumIndex++, sum, devIndex);
        }
        else
        {
            if (sum % array[devIndex] == 0) 
            {
                 Console.WriteLine(array[devIndex]);
                 print(array, sumIndex, sum, devIndex++);
            }
        }
    }

【问题讨论】:

  • “它不起作用” 对于 Stack Overflow 来说不是一个合理的问题陈述。你需要更具体。请解释实际发生的事情与您的预期不同。
  • 我认为这是功课。我强烈建议学习使用调试器。这使您可以逐步执行程序并检查所有变量的值,这使您可以验证您对应该发生什么的假设。一个提示是用一个小数组测试程序,比如 {1, 2, 3}。如果你添加另一个数字,比如 4,会发生什么?如果你颠倒数字的顺序会发生什么?
  • 还有。该问题应指定“均匀除以总和”。否则没有多大意义。

标签: c# arrays recursion sum


【解决方案1】:

晚上好,我相信您的问题是您使用的是 PostIncrement 运算符而不是预增量运算符。 改变

print(array, sumIndex++, sum, devIndex);

print(array, sumIndex, sum, devIndex++);

print(array, ++sumIndex, sum, devIndex);

print(array, sumIndex, sum, ++devIndex);

这两者之间的区别在于,第一个将值传递给函数(假设为 1),然后在第二个将其递增的地方递增(因此将其从 1 更新为 2),然后将其传递给函数。

所以目前你的代码将永远递归只处理数组中的第一个值!

【讨论】:

    猜你喜欢
    • 2010-11-16
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2013-12-06
    • 2021-12-16
    相关资源
    最近更新 更多