题解 | #牛牛的Hermite多项式#
牛牛的Hermite多项式
https://www.nowcoder.com/practice/0c58f8e5673a406cb0e2f5ccf2c671d4
#include <stdio.h>
int hermite(int n,int x){
if(n==0) return 1;
if(n==1) return 2*n;
return 2*x*hermite(n-1,x)-2*(n-1)*hermite(n-2,x);
}
int main() {
int n,x;
scanf("%d%d",&n,&x);
int d=hermite(n,x);
printf("%d",d);
return 0;
}
/*如果你在上面的 return 2*x*hermite(n-1,x)-2*(n-1)*hermite(n-2,x); 前面加上if(n>1) ,编译会是错误的,为什么呢?
虽然逻辑上n总是满足 n == 0,n == 1 或 n > 1 中的一种情况,但编译器并不能确定这一点。在这种情况下,C 语言标准认为函数可能存在未定义行为,因为并非所有路径都有 return;
当然你也可以这么写:
if(n>1) return 2*x*hermite(n-1,x)-2*(n-1)*hermite(n-2,x);
return 0;// 默认返回值(逻辑上永远不会触发)
这样也会覆盖所有路径。
查看13道真题和解析