题解 | #牛牛的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;// 默认返回值(逻辑上永远不会触发) 这样也会覆盖所有路径。