题目要求:
实现一个多项式的类(a+b*x+c*x^2+d*x^3+...+),要求输入该多项式的系数和x的值后打印出这个多项式的值。这道题本身并不难,但他要求用好的算法(实际上就是递归)。
解题思路:
刚开始做这道题目的时候,我就有些疑惑,如果输入多项式的系数,那么该如何判断 输入结束呢?所以我就手动作了一个判断,如果输入系数是0的话,即结束。
然后至于递归,我应该还不太明白递归的真正含义,我就按照杨辉三角的那种递归方式了。第一项,接着第二项。直至最后。
相对而言,答案的递归才是真正的递归,而且你需要先输入最高次数,然后就可以确定要输入的系数的项数。
我的代码:
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
double sum=0.0;
double x;
vector<double> nums;
void sum_num(int i){
if(i==nums.size()){
return;
}
sum = sum + nums[i]*pow(x,i);
sum_num(i+1);
}
int main(){
double a;
cout<<"输入多项式的系数(以0为结束):";
cin>>a;
while(a!=0){
nums.push_back(a);
cin>>a;
}
cout<<"输入x的值:";
cin>>x;
sum_num(0);
cout<<"多项式的值:"<<sum<<endl;
return 0;
}
答案代码:
#include<iostream>
#include<time.h>
using namespace std;
int const SIZE = 60;
int fun(float num[],int x,int n,int N){
if(n==0){
return num[N];
}else{
return x*fun(num,x,n-1,N)+num[N-n];
}
}
int main(){
int n,x;
float num[SIZE];
cout<<"请输入最高项次数:";
cin>>n;
cout<<"请输入各项的系数:";
for(int i=0;i<=n;i++){
cin>>num[i];
}
cout<<"请输入x:
cin>>x;
cout<<"结果为"<<fun(num,x,n,n)<<endl;
cout<<"Time used="<<(double)clock()/CLOCKS_PER_SEC;
return 0;
}
遍观历年真题,递归的问题确实出的很多,所以需要你好好思考一下该如何进行递归