使用递归函数

时间:2014-03-09 15:19:36

标签: c++ recursion

我正在编写一个程序,通过创建简单的骰子游戏,帮助我们了解递归函数的工作原理。但由于某种原因,输出是错误的,我不知道为什么。我得到了这个:

enter image description here

当我得到这样的东西时:

enter image description here

这是我的代码:

    #include <iostream>
//function prototype:
int payoff(int x, int y, int z);

void loopR1(int R1, int upto);
void loopR2(int R2, int upto);
void loopR3(int R3, int upto);

//global variables:
int total;

using namespace std;
int main(void) {
    cout << "R1\t R2\t R3\t\n" << endl;

    ////////////////////
    //first loop
    ////////////////////
    loopR1(1, 4);
    printf("\n");

    system("PAUSE");
    return 0;
}
void loopR1(int R1, int upto)
{
    while (R1 < upto){
        loopR2(R1, upto);
        R1++;
    }
}
void loopR2(int R2, int upto)
{
    while (R2 < upto){
        loopR3(R2, upto);
        R2++;
    }
}
void loopR3(int R3, int upto)
{
    int R1 = 1;
    int R2 = 1;
    while (R3 < upto){
        printf("%d\t %d\t %d\t payoff is %d\n", R1, R2, R3, payoff(R1, R2, R3));
        R3++;
    }
}

/////////////////////////////////////////////////////////
//FUNCTIONS:
/////////////////////////////////////////////////////////
int payoff(int R1, int R2, int R3) {
    if (R2 < R1) {
        total = total + R2;
    } //end if
    else {
        if (R3 < R1) {
            total = total + R3;
        } //end if
        else {
            total = R1;
        } // end else
    } //end else


    if (R3 < R2) {
        total = total + (2 * R3);
    } //end if
    else {
        if (R3 < R1) {
            total = total + R3;
        } //end if
        else {
            total = R1;
        } //end else
    } //end else

    return total;
} //end function payoff

有人可以帮我弄清楚我做错了什么以及如何让它正确循环?提前谢谢!

1 个答案:

答案 0 :(得分:0)

您的代码包含以下功能:

void loopR3(int R3, int upto)
{
    int R1 = 1;
    int R2 = 1;
    while (R3 < upto){
        printf("%d\t %d\t %d\t payoff is %d\n", R1, R2, R3, payoff(R1, R2, R3));
        R3++;
    }
}

根据上下文,您可能想要做的是传递R1和R2的值,而不是声明本地版本并将它们初始化为值1.

或者,由于您使用的是C ++,因此您可以考虑创建一个对象来保存所有三个值和total的值(其功能在您的代码中不清楚)。如果这样做,您还可以创建一个函数来打印出值(也许使用iostream而不是printf)。