计算数组元素和的递归方法递推关系写法正确性及优化问询
递归求和的递推关系写法分析
先看你给出的C#递归求和代码(注:C#中数组长度属性是Length,不是length,代码里此处为笔误):
public static int sumRecursive(int[] arr, int i) { if (i == arr.Length) { return 0; } return arr[i] + sumRecursive(arr, ++i); }
针对两种递推关系写法的分析如下:
写法正确性判断
F(i) = arr[i] + F(i + 1):这是简化表述,默认数组arr是当前语境下的固定值,在上下文明确的场景下可以用,但从函数定义的严谨性来说,它没把数组作为函数输入参数体现,会让不了解语境的人疑惑arr的来源,不算严格准确的写法。F(arr, i) = arr[i] + F(arr, i + 1):这种写法完全对应代码里的递归函数逻辑——函数输入就是数组arr和索引i,递推关系清晰体现了两个参数的依赖,边界条件也应修正为F(arr, n) = 0(n为数组长度),是严格正确的写法。
更优写法建议
如果想兼顾严谨性和可读性,推荐分情况明确写出递推关系:
当
i = n(数组长度)时,F(arr, i) = 0;
当i < n时,F(arr, i) = arr[i] + F(arr, i + 1)
这种写法把边界条件和递归分支清晰分开,理解和传播时都不会产生歧义。
内容的提问来源于stack exchange,提问作者efnwn
相关产品推荐
相关产品推荐

