从递归for循环返回

时间:2017-12-16 17:39:22

标签: c++ recursion iteration

我编写了一个函数来查找一个数字,使得其数字之和等于给定的总和以及等于给定数字的位数。例如,如果给定sum = 20并且给定no = 3,则解为299,因为299是最小的3位数,使得299的数字之和为20。 看看我的代码。

#include <iostream>
#include <math.h>

using namespace std;

void smallestNumber(int sum, int no_of_digits, int mul, int num, int s_num) {
    int i;

    if(no_of_digits <= 0)
        return;

    for(i=0; i<9; i++) {
        num += (i+1)*mul;
        s_num += (i+1);
        if(s_num == sum) {
            cout << num << endl;
            exit(1);          //Alternative for exit(1)
        } else if(s_num < sum) {
            smallestNumber(sum, no_of_digits-1, mul/10, num, s_num);
        }
        num -= (i+1)*mul;    //Backtracking
        s_num -= (i+1);
    }
}

int main() {
    int sum, no_of_digits;
    cin >> sum >> no_of_digits;
    smallestNumber(sum, no_of_digits, pow(10,no_of_digits-1), 0, 0);
    return 0;
}

在上面的代码中,我能够根据需要获得解决方案但是我无法弄清楚当s_num = sum时如何返回。目前我在这里使用exit(1)并且我不能使用return语句,因为它也会打印所有其他数字组合。另外,我如何确定解决方案是否可行并显示-1。

0 个答案:

没有答案
相关问题