当前位置: 首页 > 知识库问答 >
问题:

使用递归的c中的数字模式函数

乜璞瑜
2023-03-14

使用递归实现以下函数。不要使用任何局部变量或循环。

无效模式(无符号整数n)

//前提条件:n

//后置条件:输出由整数行组成。第一行

//是数字n。下一行是数字2n。下一行是

//数字4n,以此类推,直到你达到一个大于

//4242.这个数字列表会被重复直到你回来

//致。

/*n=840的输出示例:

840

1680年

3360

6720

6720

3360

1680年

840 */

//这是我的密码

#include <iostream>

using namespace std;

void pattern(unsigned int n)
{
    if(n > 0)
    {
        cout << n << endl;
        return pattern(n * 2);
    }else if( n > 4242)
    {
        return pattern(n / 2);
    }
}

int main()
{
    pattern(840);
    return 0;
}

//我的代码只是不断地加倍n,它没有回到原来的n。

共有3个答案

东门新立
2023-03-14

if(n

赵永新
2023-03-14
void pattern(unsigned int n)
{
    if (n > 0)
    {
        cout << n << endl;
        if (n < 4242)
            pattern(n * 2);
        cout << n << endl;
    }
}
万俟穆冉
2023-03-14

另外两个答案指出了其中一个问题

我认为最明显的方法是将其分为两个函数,并添加一个“方向”布尔值,指示您是向上还是向下:

void pattern(unsigned int n) {
   pattern_with_dir(n, true);
}

void patten_with_dir(unsigned int n, bool increase) {
    if (n <= 0) {
        return;
    }
    cout << n << endl;
    if (n > 4242) {
        pattern_with_dir(n, false);
    } else {
        if (increase) {
            pattern_with_dir(n * 2, true);
        } else {
            pattern_with_dir(n / 2, false);
        }
    }
}

注意:您还可以将其分为3个功能:

void pattern(unsigned int n) {
   pattern_up(n);
}

void pattern_up(unsigned int n) {
    cout << n << endl;
    if (n > 4242) {
        pattern_down(n);
    } else {
       pattern_up(n * 2);
    }
}

void pattern_down(unsigned int n) {
    if (n <= 0) {
        return;
    }
    cout << n << endl;
    pattern_down(n / 2);
}

但是最简洁的解决方案是使用递归堆栈来帮助你倒数:

void pattern(unsigned int n) {
   // Going up
   count << n << endl;
   if (n <= 4242) {
       pattern(n*2);
   }
   // this will be called "on the way back down"
   count << n << endl;
}
 类似资料:
  • 本文向大家介绍C#函数式编程中的递归调用之尾递归详解,包括了C#函数式编程中的递归调用之尾递归详解的使用技巧和注意事项,需要的朋友参考一下 关于递归相信大家已经熟悉的不能再熟悉了,所以笔者在这里就不多费口舌,不懂的读者们可以在博客园中找到很多与之相关的博客。下面我们直接切入正题,开始介绍尾递归。 尾递归 普通递归和尾递归如果仅仅只是从代码的角度出发来看,我们可能发现不了他的特点,所以笔者利用两张堆

  • 问题内容: 我必须用Java编写幂方法。它接收两个整数,无论​​它们是正数还是负数都没有关系。它应该具有的复杂度。它还必须使用递归。我当前的代码有两个数字,但我不断输出的结果是零,我不知道为什么。 问题答案: 让我们从一些数学事实开始: 对于正n,aⁿ=a⨯a⨯…⨯an次 对于负数n,aⁿ=⅟a⁻ⁿ=⅟(a⨯a⨯…⨯a)。这意味着 a 不能为零。 对于n = 0,即使 a 为零或负,aⁿ= 1 。

  • 我是新的编码和需要作出曼德尔布罗特函数。对于那些不知道的人来说,Mandelbrot集合是一组复数。从本质上讲,你可以从一个复数开始,然后把它平方,然后把它加到原来的复数中。例如,如果我使用数字1,集合将是0、1、2、5、26。。。我从0,1,(1^2)1=2,(2^2)1=5,(5^2)1=26得到这个值。现在,我的递归函数应该使用两个输入来求这个集合的和:一个数字n,它是我们进入集合的距离。例

  • 考虑Python中的这个基本递归: 根据斐波那契数列的(n-1)(n-2)函数,这是有道理的。 Python如何执行包含另一个递归的递归,这个递归不在同一代码行内,而是在同一代码行内?“finobacci(number-1)”是否完成所有递归,直到它到达“1”,然后它对“fibonacci(number-2)”做同样的事情,并将它们相加? 作为比较,下面的递归函数将一个数“x”提升为“y”的幂,我

  • 本文向大家介绍C++实现递归函数的方法,包括了C++实现递归函数的方法的使用技巧和注意事项,需要的朋友参考一下 递归函数通俗来讲就是自己调用自己本身。这样有很大的好处,代码很方便简洁,把复杂的有规律的运算交给计算机去做。 1、首先定义问题。递归函数(recursion)需要设置一个函数,然后再可以循环往复的执行下去。 2、把问题换成公式。 如把阶乘之和定义为f(n)=n*f(n-1)。也就是说n*

  • 本文向大家介绍C#程序使用递归查找数字的数字总和,包括了C#程序使用递归查找数字的数字总和的使用技巧和注意事项,需要的朋友参考一下 假设我们已经设置了可以找到数字总和的数字- 以下将通过输入数字并递归检查来找到数字总和- 示例 以下是我们的代码,用于在C#中使用递归来查找数字的总和。 输出结果