我试图将此循环转换为递归循环,请告诉我它是否正确
正常
void countDown(int n){
for (int i=n; i>0; i--) {
cout << “Time is up\n”;
}
RECURSIVE
int countDown(int n, int i)
{
if (n == i) return "time is up";
return countDown(n-1,i+n);
}
答案 0 :(得分:0)
当您想要显示它时,您将返回一个字符串。您的退货类型应该是无效的。
另外,我认为你对你想做的事情有点过于复杂。你的测试应该是检查我是否大于0.如果是这种情况,那么你显示你的消息,并通过删除1到i调用相同的功能。否则,你什么都不做:我等于0,所以你退出这个功能。
void countDown(int i)
{
if (i > 0)
{
cout << "time is up\n";
countDown(i-1);
}
}
你通过给i赋值n来调用相同的函数。
现在你的逻辑听起来很奇怪。你在每次迭代时都会显示“时间到了”,而你可能只想等待n次迭代,然后在你的for部分之外显示它。你真正想要实现的可能是:
void countDown(int n)
{
for (int i=n; i>0; i--)
{
// Do anything like showing the countdown or something.
}
cout << “time is up\n”;
}
在递归中:
void countDown(int i)
{
if (i == 0)
cout << "time is up\n";
else
countDown(i-1);
}
每次调用此功能时,都会检查倒计时是否达到0.如果是这种情况,则会显示消息,说明时间已到。否则,你递归调用函数,将i减1。
答案 1 :(得分:0)
我会返回一个字符串,只传递一个参数。
#include <iostream>
using namespace std;
const char* countDown(int n)
{
if (n == 0) {
return "Time is up";
}
return countDown(n-1);
}
int main(void) {
cout << countDown(10) << endl;
}
答案 2 :(得分:0)
以下是完整的测试工作逻辑代码:
#include<iostream>
using namespace std;
void countDown(int n)
{
for (int i=n; i>0; i--)
{
cout << i << "\n";
}
cout << "\nTime is up\n";
}
void countDownRec(int n)
{
if(n == 0)
{
cout << "\nTime is up\n";
return;
}
cout << n << "\n";
countDownRec(n-1);
}
int main()
{
countDown(5);
cout<<"\n";
countDownRec(5);
return 0;
}