我想问一下为什么输出结果这么大啊?

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	int n,a[100];
	cin>>n;
	if(n==1) a[n]=0;
	if(n==2) a[n]=1;
	for(int i=3;i<=n;i++)
	{
		a[1]=0;a[1]=1;
		a[i]=(i-1)*(a[i-1]+a[i-2]);
	}
	cout<<a[n]<<endl;
	return 0;
} 

我输入3 结果得出512 

改成这样:

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	int n,a[100];
	cin>>n;
	//if(n==1) a[n]=0;
	//if(n==2) a[n]=1;
	a[1] = 0;
	a[2] = 1;
	for(int i=3;i<=n;i++)
	{
		//a[1]=0;a[1]=1;
		a[i]=(i-1)*(a[i-1]+a[i-2]);
	}
	cout<<a[n]<<endl;
	return 0;
}