c++ - 在 C++ 中使用递归将数字加倍

标签 c++ recursion

我在弄清楚如何使用递归将数字加倍时遇到问题,问题是函数必须灵活,它必须能够被调用以将数字加倍然后再次将结果加倍并继续直到它停止.例如,每次你戳一个粘液都会 split 成 2,我需要以某种方式使用递归来表示它(1->2->4->8->16)但是我在努力时遇到了困难很好地理解递归。

我从类似的东西开始

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

这是我所了解的,我认为这是非常错误的。

最佳答案

不知道你是不是为了解决这个问题,可以给个引用。

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

关于c++ - 在 C++ 中使用递归将数字加倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27309701/

相关文章:

c++ - 使用 "mask"分割图像

c++ - 以在编译时和运行时都可用的方式在 C++ 中描述像素格式信息

c - 不明白这个递归函数

python - 递归地在每个深度绘制带有颜色的谢尔宾斯基三角形?

c++ - fork在递归函数中的使用

c# - 获取将返回列表的文件夹和子文件夹中所有文件的方法

c++ - C2995 : template already defined

c++ - lambda 表达式中的作用域

c# - Unicode问题

javascript - 我怎样才能让这个javascript函数调用自己?