函数返回看似随机的数字而不是返回的变量的值

时间:2013-11-21 22:42:25

标签: c++ algorithm function

所以,我正在编写这个简单的代码(完成后,它应该计算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()中,它提供了更高,看似随机的值。

有人可以告诉我为什么吗?

提前致谢:)

1 个答案:

答案 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;
}