C ++:递归(变量失去价值)

时间:2018-03-18 11:29:39

标签: c++ recursion

我为这个问题http://www.spoj.com/problems/COINS/做了一个简单的递归程序,但是每当递归发生时,我的类变量都会丢失它们的值并存储递归循环中的值。

以下是代码:

#include<iostream>

using namespace std;

class a
{
public:
int c = 0, d = 0, b = 0, x = 0;
int recur(int n)
{
    b = (n / 2);
    if (b >= 12)
    {
        b = recur(b);
    }
    c = (n / 3);
    if (c >= 12)
    {
        c = recur(c);
    }
    d = (n / 4);
    if (d >= 12)
    {
        d = recur(d);
    }
    x = b + c + d;
    return x;
}
};

int main()
{
int n;
while(cin)
{
    cin >> n;
    int b = 0, r = 0;
    a abc;      
    r = (n > abc.recur(n)) ? (n) : (abc.recur(n));
    cout << r << endl;
}
return 0;
}

因此,对于输入12,我将获得13但是输入值为44,我得到44。

1 个答案:

答案 0 :(得分:0)

这可能是一个有效的解决方案:

#include <iostream>

using namespace std;

int changeToDollars(int bytelandians) {
  int byTwo = bytelandians / 2;
  int byThree = bytelandians / 3;
  int byFour = bytelandians / 4;
  int sum = byTwo + byThree + byFour;
  if (sum < bytelandians) {
    return bytelandians;
  } else {
    return changeToDollars(byTwo) + changeToDollars(byThree) + changeToDollars(byFour);
  }
}

int main() {
  int bytelandians;
  cout << "How much bytelandians?: ";
  while (cin >> bytelandians) {
    cout << "Corresponding $: " << changeToDollars(bytelandians) << endl;
    cout << "How much bytelandians?: ";
  }
  return 0;
}

changeToDollars函数使用简单的递归算法,将每个Byteland硬币交换为相应的三个具有较小值的硬币,直到总转换量有利。