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

C++ : Recursion (Variables losing value)

本文关键字:失去 变量 递归 C++      更新时间:2023-10-16

我 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。

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

#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 硬币兑换成相应的三个具有较小价值的硬币,直到整体转换金额有利。