C语言不理解 请高手来帮我梳理下?

来源:百度知道 编辑:UC知道 时间:2024/05/31 10:27:54
分别写出计算Hermite多项式Hn(x)的值的递推和递归函数。Hn(x)定义如下:
H0(x)=1
H1(x)=2x
Hn(x)=2xHn-1(x)-2(n-1)Hn-2(x)(对x>1)
一般人会这样写函数
long H(int n,int x)
{
if(n==0)return 1;
if(n==1)return 2*x;
if(n>1)return (2*x*H(n-1,x)-2*(n-1)*H(n-2,x));
} 但这样递推深度过大,有网友将函数改写为
long fun2(int n,long a,long b,int x)
{ if(n<=0) return a;
return fun2(n-1,b,2*x*b-2*(n-1)*a,x);
}
同样都能实现 第二个函数要简易点,我不太理解第二个函数是怎么写出来的,有哪位高手帮我梳理下。

递归调用确实有些费解!像这种情况应该在纸上好好打打草稿,而不是光看就看出来的!如果你这个函数不太理解是怎么写出来的 说明你递归函数没有学好,先从未知条件往回推,推到一个已知条件后再反过来推未知的,
假设现在n=5,n大于0,跳过if到return fun2(n-1,b,2*x*b-2*(n-1)*a,x);将5代入后n=n-1=4 b代表h4,h4不知道,需要知道h3就可以知道h4(为什么知道h3就可以知道h4?因为h4和h3的关系是2*x*b-2*(n-1)*a即(2*x*H(n-1,x)-2*(n-1)*H(n-2,x)),所以再将n=4代入,后n=3,b代表h3,h3不知道需要知道h2就可以知道h3,所以再将n=3带入,带入后n=2,同理h2也不知道,再推h1,直到h0,h0已知=1。然后在从h0开始,知道h0就可以知道h1,知道h1就可以知道h2,,,,,直到推到了h5,

你想求Hn(x),那么每个Hi(x)[i=0 to n-1]都要求出来。
Hi+2和Hi+1,都要求Hi,重复太多。

因此采用动态规划的思想,以空间换时间。
a,b就是前两个Hn-2和Hn-1。

关注