使用C ++中的Recursion将数字加倍

时间:2014-12-05 05:57:02

标签: c++ recursion

我无法弄清楚如何使用递归加倍数字,问题是函数必须灵活,必须能够调用一个数字加倍然后再次加倍结果并继续直到它停止。例如,每次你戳它时,一个粘液分成2个,我需要以某种方式使用递归来表示这个(1-> 2-> 4->> 8-> 16)然而我已经碰到了一块墙,因为我和#39;我很难理解递归。

我从

开始
int doublesomething(int N, int X){
 return N * X;
}

然后把它放到另一个函数中,但是如果没有函数循环并重置数字,我会弄清楚如何加倍它,我会链接我在这里的代码,但老实说这只是胡言乱语,因为我'有点迷失在递归的兔子洞里

int doublethis(int times){
 if (times == 0){
  return 0;
  } else {
   int number;
   doublesomething(2 , number);
   int doubled = doublethis(times - 1);

  }
   return doubled;
}

就我而言,我认为这是非常错误的。

5 个答案:

答案 0 :(得分:1)

我不知道你是否有意解决这个问题,你可以参考一下。

int doublethis(int times){
    int result;
    if (times == 0){
        result = 1;
    }
    if(times > 0) {
        result = 2 * doublethis(times - 1);
    }
    printf("%d \n", result);
    return result;
}

这是一个简单的递归示例,我认为您可以逐步学习算法,并使用图表执行算法的过程。如果您输入时间5,则行为如下:

result5 
= 2 * doublethis(4) 
= 2 * 2 * doublethis(3) 
= 2 * 2 * 2 * doublethis(2) 
= 2 * 2 * 2 * 2 * doublethis(1) 
= 2 * 2 * 2 * 2 * 2 * doublethis(0)
print result0
print result1
print result2
print result3
print result4
print result5

答案 1 :(得分:0)

您需要某种终止条件,例如:

int f(int n, int x)
{
    if (n == 1)
        return x;

    return n * x + f(n - 1, x);
}

答案 2 :(得分:0)

你不需要递归,但如果你出于某种原因需要它(家庭作业,学习),根据你的代码:

int doublethis(int times, int number) {
  if (times <= 0) {
    return 0;
  } else {
    number *= 2;
    if((--times) > 0)
      number = doublethis(times, number);
    return number;
  }
}

如果您是肯定的,times在第一次通话时将始终为1或更多,简化版本:

int doublethis(int times, int number) {
  if (times == 1) {
   return number;
  } else {        
    return doublethis(times-1, number * 2);
  }
}

或者甚至更短:

int doublethis(int times, int number) {
  return (times == 1) ? number : doublethis(times-1, number * 2);
}

如果times为1,则会返回相同的数字...如果您希望在使用times = 1进行调用时实际加倍,则将times==1条件更改为{{1} (会更有意义)

答案 3 :(得分:0)

你可以试试这个......

#include <iostream>
using namespace std;

void doublethis(int n,int time)
{
    if(time==0)
    return;
    cout<<" -> " <<n*2;
    doublethis(n*2,time-1);
    return; 
}

int main()
{
    int n,time;
    cin>>n>>time;
    cout<<n ;
    doublethis(n,time);
    return 0;
}

如果你想要加倍3次,这段代码的输出将是

3 -> 6 -> 12 -> 24 -> 48

答案 4 :(得分:0)

#include <iostream>

using namespace std;

void doubleThis(int num, int until) {
    if (until == 0) {
        return;
    }
    num = num * 2;
    cout << num << endl;
    doubleThis(num, until-1);
}


int main() {
    int x;
    cout << "Enter the the number to be doubled for next 5 times " << endl;
    cin >> x;
    cout << "Entered number is " << x << endl;
    doubleThis(x, 5);

    return 0;
}

对于另外5个数字,它完成了加倍的序列。您可以根据需要修改任意数量的代码。