控制到达非空函数的结束

时间:2015-06-11 08:36:26

标签: c++ recursion

我试图调用这个递归方法,但我不明白为什么它没有到达else语句返回mul。我在main函数中传递值0,小于n,并且在x变大于n时,它应该移动到else函数。

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int n,mul=0;
vector <int> a;

int calc(int x)
{   int mul,chk;

int l=n;
if(x<n)
{   
    chk=a[x]*(l-1);
    l--;
    if(mul<chk)
        {
            mul=chk;
    }

  calc(x+1);
        }

  else  
   { return mul;}

  }

int main() {

cin>>n;
for(int i=0;i<n;i++)
    cin>>a[i];
sort(a.begin(),a.end());

int z=calc(0);
cout<<z;

return 0;
 }

1 个答案:

答案 0 :(得分:0)

如果不知道确切的错误信息,我不是100%确定问题是什么,但我猜是以下内容:

您的功能看起来像这样(简化):

int calc(int x) {
    if(someCondition){   
        if(otherCondition){}
        calc(x+1);
    } else {
        return mul;
    }
}

问题是,如果someConditiontrue,则该函数不会返回任何内容。你可能想这样做:

return calc(x+1);

而不仅仅是

calc(x+1);