Итак, я пишу этот простой код (когда он закончен, он должен считать значения 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);
в основной(), это дает гораздо выше, казалось бы, случайное значение.
Может ли кто-нибудь сказать мне, почему?
Заранее спасибо :)
Я думаю, что ваша функция wynik не имеет «возврата» в своей последней строке. –
Более описательные имена переменных будут иметь большой путь к тому, чтобы сделать это более читаемым. И вы говорите о * рекурсивных * функциях в описании проблемы? – John
По какой-то причине кажется распространенным недоразумением. Возврат по-прежнему необходим даже при выполнении рекурсии. – john