C# 递归算法

前几天用到了递归遍历文件夹,所以今天就又找了两道递归的例子做了下,首先是0加到100:

private static int Digui1(int j)
{
if (j == 0)
return 0;
return Digui1(j - 1) + j;
}

然后是{1,1,2,3,5,8,13.....}求第三十位:

private static int Digui(int j)
{
k++;
if (j<=0)
return 0;
if (j == 1)
return 1;
return Digui(j-1) + Digui(j - 2);
}

虽然很顺利算出来了,但递归的效率确实特低,那第二个例子来说,定义了一个全局变量监视递归调用的次数发现获得第30个

元素的时候竟然调用自己2692537次,而算100第一百位的时候等了N久就是算不出来...可能是我电脑太水了(貌似超出了int能表示的范围...)?

然而用循环做的:

private static int Digui(int j)
{
int[] arr = new int[30];
arr[0] = 1;
arr[1] = 1;
int first = arr[0];
int second = arr[1];
for (int i=2; i <j; i++)
{
arr[i] = first + second;
first = second;
second = arr[i];
}
return arr[j-1];
}

虽然没有像递归那样简洁,但运行速度比那个快多了。