将for循环转换为递归基本方法

时间:2017-05-03 12:06:26

标签: c++ recursion

我试图将此循环转换为递归循环,请告诉我它是否正确

正常

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);
}

3 个答案:

答案 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;
}