递归计算多项式相乘

fullSE 2016-03-20 11:40:24
求大神解惑,这个程序怎么解释

#include <iostream>
#include <stdio.h>
void product(float p[],float q[],float c[])
{
c[0]=p[0]*q[0];
c[2]=p[1]*q[1];
c[1]=(p[0]+p[1])*(q[0]+q[1])-c[0]-c[2];
}
void plus(float p[],float q[],float c[],int n)
{
int i;
for(i=0;i<n;i++)c[i]=p[i]+q[i];
}
void mins(float p[],float q[],int n)
{
int i;
for(i=0;i<n;i++)
p[i]=p[i]-q[i];
}
void poly_product(float p[],float q[],float r0[],int n)
{
int k,i;
float *r1,*r2,*r3;
r1=new float[2*n-1];
r2=new float[2*n-1];
r3=new float[2*n-1];
for(i=0;i<2*n-1;i++)
r1[i]=r2[i]=r3[i]=0;
if(n==2)product(p,q,r0);
else{
k=n/2;
poly_product(p,q,r0,k);
poly_product(p+k,q+k,r1+2*k,k);
plus(p,p+k,r2+k,k);
plus(q,q+k,r3,k);
poly_product(r2+k,r3,r2+k,k);
mins(r2+k,r0,2*k+1);
mins(r2+k,r1+2*k,2*k-1);
plus(r0+2,r2+k,r0+k,2*k-1);
plus(r0+2*k,r1+2*k,r0+2*k,2*k-1);
}
delete r1;
delete r2;
delete r3;
}

int main(int argc, const char * argv[]) {
int i;
float p[5]={1,2,3,4};
float q[5]={4,3,2,1};
float r0[7];
poly_product(p,q,r0,4);
for (i=0;i<7;i++) std::cout<<r0[i]<<' ';
return 0;
}
...全文
146 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-03-21
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧