题目来源:码蹄集
题目描述:
B站老师思路讲解链接:https://www.bilibili.com/video/BV1r84y1E7TB/?t=1888.7&vd_source=3ae2a916df1bc5c1114c2bf3e95a2118
C++代码实现:
原文参考链接:https://blog.51cto.com/u_15745546/5950626
#include<iostream>
using namespace std;
long long f[25],n;
int main()
{
cin>>n;
f[1]=0;f[2]=1;f[3]=2;
if(n==1||n==2||n==3){
cout<<f[n];
return 0;
}
for(long long i=4;i<=n;i++)f[i]=(i-1)*(f[i-1]+f[i-2]);
cout<<f[n];
return 0;
}
Python代码实现:
n = int(input())
f = [0] * 25
f[1] = 0
f[2] = 1
f[3] = 2
if n == 1 or n == 2 or n == 3:
print(f[n])
else:
for i in range(4, n+1):
f[i] = (i-1) * (f[i-1] + f[i-2])
print(f[n])
Java代码实现:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long[] f = new long[25];
int n = sc.nextInt();
f[1] = 0;
f[2] = 1;
f[3] = 2;
if (n == 1 || n == 2 || n == 3) {
System.out.println(f[n]);
return;
}
for (int i = 4; i <= n; i++) {
f[i] = (i-1) * (f[i-1] + f[i-2]);
}
System.out.println(f[n]);
}
}