这是一个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;
}
当我尝试运行它时,此代码崩溃了 我非常感谢任何提示
答案 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;
}