在C中的有这样一个递归函数int sum(int *a,int n)
{
     ''''''''
int sum1,sum2
sum1=*a+sum(a+2,n-2)
sum2=*(a+1)+sum(a+2,n-3)
    if(sum1>sum2) return sum2;
    else return sum2
}
sum函数里用到指针数组的参数,如果我在.net里要重新上面的函数,应该怎样写呢,
例如我也是传一个数组参数进去,但下面的递归就不行了,
C#
int sum(int[] a,int n)
{
''''''''''
sum1=a[0]+sum(?)
}
vb.net
public function Sum(a() as integer,n as integer) as integer
    dim sum1,sum2 as integer
    sum1 = a(0) + Sum(?)
end function
我应该怎样传参数进去,才能实现递归呢?或换另外一种方式。

解决方案 »

  1.   

    很遗憾,.net中不能如此灵活的使用指针,要想使用指针控制数组,必须先将数组定址,而且不能将数组首地址作为数组来用
    要在.net中实现上面的函数,只能通过下标        int Sum(int[] numbers, int startIndex)
            {
                if (startIndex < numbers.Length - 1)
                    return numbers[startIndex] + Sum(numbers, startIndex + 1);
                else
                    return numbers[startIndex];
            }
      

  2.   

    我上面是举得你C#的例子
    这个是你要的例子,从你给出来的代码看,会造成内存益出的吧,可能你在前面加了判断        static int Sum(int[] numbers, int index, int n)
            {
                if (index + 1 >= numbers.Length)// 以免越界
                    return 0;            int sum1;
                int sum2;            sum1 = numbers[index] + Sum(numbers, index + 2, n - 2);
                sum2 = numbers[index + 1] + Sum(numbers, index + 2, n - 3);
                if (sum1 > sum2)
                    return sum1;
                else
                    return sum2;        }