所以,我正在编写这个简单的代码(完成后,它应该计算n个多项式的值,每个r度,n个点。我也不能使用循环,我应该在递归函数中做的事情 - 但它还没有完成,主题与我的问题无关。)
所以,到目前为止的代码是:
#include <iostream>
#include <cmath>
using namespace std;
void wypisz(int i, int k, int* c)
{
if (i<k) cout<<*(c+i)<<" ";
else return;
i++;
wypisz(i,k,c);
}
void podaj(int i, int k, int* c)
{
if (i<k) cin>>*(c+i);
else return;
i++;
podaj(i,k,c);
}
int wynik (int i, int k, int* c, int su, int mn)
{
int y;
if (i<k) {
cin>>y;
su+=y*mn;
mn*=*c;
}
else {cout<<su<<endl; return su;}
i++;
wynik (i, k, c, su, mn);
}
int main(){
int m,n,r;
cin>>m;
int tab[m];
podaj(0,m,tab);
wypisz(0,m,tab);
cin>>r;
cout<<wynik(0,r,tab,0,1);
system("PAUSE");
return 0;
}
它计算第一个点中的第一个多项式,但仅在函数中计算。致电时
cout<<su;
在终止wynik()函数之前,它给出了正确的值,但在调用
时cout<<wynik(0,r,tab,0,1);
在main()中,它提供了更高,看似随机的值。
有人可以告诉我为什么吗?
提前致谢:)
答案 0 :(得分:4)
在你的wynik
函数中,在进行递归时,你并没有真正地返回计算出的值...你应该改变最后一行:
wynik (i, k, c, su, mn);
到
return wynik(i, k, c, su, mn);
或者,更好的是,更改整个功能,使其看起来很清晰:
int wynik (int i, int k, int* c, int su, int mn)
{
int y;
if (i<k) {
cin>>y;
su+=y*mn;
mn*=*c;
return wynik (++i, k, c, su, mn);
}
else return su;
}