一个递归函数将每个新位置打印到控制台?

时间:2017-11-30 23:00:27

标签: c++ recursion

这是一个c ++的家庭作业问题,所以我非常欣赏一些正确方向的指导。 该问题要求输入正整数来表示位置。如果初始位置是偶数,则新位置是d / 2,如果奇数,则新位置是3 * d + 1,并且这继续直到位置为1。

例如:输入一个正整数:11

OJP for 11:11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

这是我通过迭代工作的一些代码:

#include "stdafx.h"
#include <iostream>
using namespace std;

int ollyjumppattern(int d)
{
    if (d == 1)
    {
        return 1;
    }
    else if (d % 2 == 0)
    {
        return (d / 2);
    }
    else
    {
        return (3 * d + 1);
    }
}


int main()
{
    int target;
    cout << "Enter a positive integer: ";
    cin >> target;
    cout << "The OJP for " << target << ": ";

    if (target == 1)
    {
        cout << "1";
    }
    else
    {
        cout << target;
        while (target != 1)
        {
            cout << " " << ollyjumppattern(target) << " ";
            target = ollyjumppattern(target);
        }
        cout << endl;
    }
    return 0;
}

这就是我到目前为止递归的原因:

#include "stdafx.h"
#include <iostream>
using namespace std;

int ollyjumppattern(int d)
{
    if (d == 1)
    {
        cout << "1";
        return 1;
    }
    else if (d % 2 == 0)
    {
        int result = ollyjumppattern(d/2);
        cout << result << " ";
        return result;
    }
    else
    {
        int result = ollyjumppattern(3*d+1);
        cout << result << " ";
        return result;
    }
}


int main()
{
    int target;
    cout << "Enter a positive integer: ";
    cin >> target;
    cout << "The OJP for " << target << ": ";

    if (target == 1)
    {
        cout << "1";
    }
    else
    {
        cout << ollyjumppattern(target);
        cout << endl;
    }
    return 0;
}

当我尝试运行它时,此代码崩溃了 我非常感谢任何提示

1 个答案:

答案 0 :(得分:1)

您的递归很好,您的代码中唯一的问题是您打印错误的东西。您应该打印d,而不是result,因为在完成所有递归后,所有结果都只是1

您也无需在target == 1中测试main(),因为这将由函数本身处理。

#include <iostream>
using namespace std;

void ollyjumppattern(int d)
{
    cout << d << ' ';
    if (d == 1)
    {
        return;
    }
    else if (d % 2 == 0)
    {
        ollyjumppattern(d/2);
    }
    else
    {
        ollyjumppattern(3*d+1);
    }
}


int main()
{
    int target;
    cout << "Enter a positive integer: ";
    cin >> target;
    cout << "The OJP for " << target << ": ";

    ollyjumppattern(target);
    cout << '\n';
    return 0;
}