gpt4 book ai didi

c# - 递归函数没有按预期停止

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:32:02 27 4
gpt4 key购买 nike

很抱歉这个基本问题,但我已经花了几个小时。问题:将数组右移指定步数这是代码:

static int[] ShiftRight(int[] arr, int shiftTimes)
{
if (shiftTimes == 0 || arr.Length == 0 || arr.Length == 1) return arr;

var resultArray = new int[arr.Length];

for (var i = 1; i < arr.Length; i++)
resultArray[i] = arr[i - 1];

resultArray[0] = arr[resultArray.Length - 1];

while (shiftTimes > 1)
{
shiftTimes--;
ShiftRight(resultArray, shiftTimes);
}

return resultArray;
}

问题:虽然 while 表达式是用来控制递归的,但由于某些未知原因,在到达 return resultArray; 行后,程序返回到 while 表达式,所以它给出了错误的结果!此行为在调试时可见。

不得更改方法签名。

非常感谢任何帮助。

最佳答案

您根本不需要 while 循环。您在这里只需要递归 - 它将确保重新运行数组移动直到达到停止子句 (shiftTimes==0)。

请注意,在递归调用中减少的变量 shiftTimes 不会反射(reflect)到调用环境中 - 参数是按值传递的,因此会制作一个新副本,并且每次新调用时只会减少副本 右移

您也不要对递归调用的返回值做任何事情,您应该返回它。

关于c# - 递归函数没有按预期停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38513362/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com