Java 如何使用递归按从1到n的升序打印数字,其中n在该函数的参数中给出

Java 如何使用递归按从1到n的升序打印数字,其中n在该函数的参数中给出,java,c++,Java,C++,我最初的伪代码如下所示 int ascend(int n) { Print number Return ascend } 我可以从n打印到0…但是如何使用递归从0打印到n 但无论如何,我已经设法按升序从零数到n。 下面是实现 #include<iostream> using namespace std; int countUp(int bound,int fixed) /*both parameters are passed by same

我最初的伪代码如下所示

int ascend(int n) {
    Print number
    Return ascend
}
我可以从n打印到0…但是如何使用递归从0打印到n

但无论如何,我已经设法按升序从零数到n。 下面是实现

#include<iostream>
using namespace std;

int countUp(int bound,int fixed) /*both parameters are passed by same 
            value whereas for every function call the 'bound' 
            variable will change and the 'fixed' variable will remain 
            as it is */
{
  int x = fixed;
  int y = bound-x;
  if(bound>2*fixed)
  {
    return 0;
  }
  else
    cout<<y<<endl;

  return countUp(bound+1,fixed);
}

int main()
{
  int var;
  cout<<"Please input the upper bound"<<endl;
  cin>>var;
  countUp(var,var);
}
#包括
使用名称空间std;
int countUp(int-bound,int-fixed)/*两个参数的传递方式相同
值,而对于每个函数调用“绑定”
变量将更改,“固定”变量将保持不变
事实上*/
{
int x=固定的;
int y=界-x;
如果(绑定>2*固定)
{
返回0;
}
其他的

使用您的模板,无法找到一种可能的解决方案:

#include <iostream>

static int i = 0;
void ascend(int n) {
    if(i >= n) {
        i = 0;
        return;
    }
    i++;
    std::cout << i << std::endl;
    ascend(n);
}

int main()
{
    ascend(20);

    return 0;
}
#包括
静态int i=0;
无效上升(整数n){
如果(i>=n){
i=0;
返回;
}
i++;

如果你对什么是递归有点模糊

让我们看看你的psuedo代码:

int ascend(int n) {
    Print number
    Return ascend
}
目前,这方面存在一些问题:

  • 它不知道什么时候停止
  • 您不能使用值调用ascend
  • 您当前无法获取序列中的下一个值
  • 你不需要归还任何东西
  • 知道这一点后,很容易修复:

    (数一数)


    选择一种语言,编写你的代码。当你有具体问题时回来。至少在提问之前尝试一下。看起来这是你的家庭作业。首先告诉你解决问题的方法。我想打印从1到n的数字的一般方法是先打印从1到n-1的数字,然后再将n放在最后。你的psuedo代码几乎是这里-1.在调用ascend之前,您需要获取下一个值。2.您需要知道何时停止3.打印语句的位置将决定您是打印0-n还是n-0。1.请不要填鸭式输入,这会鼓励提出不好的问题。2.您的函数只有一个用途。请尝试调用
    ascend()
    两次。@Craig Young:我困了,说“我”是我的错但是,在函数体内部,我想我希望用一些实际代码来帮助提问的人,并不是阻止他寻找更多信息和更好的方法。糟糕的问题-总会有糟糕的问题。没有人天生就具备所有的知识。谢谢。#KeepdownVote你的函数仍然只是一种用途。你了解吗明白为什么它只能一次使用吗?对于一个不能正常工作的函数,你根本帮不了忙。与其抱怨应得的否决票(注意复数),尝试向他们学习。学习改进您的测试,这样您就可以编写更少的错误代码。从长远来看,这将使您成为一名更好的开发人员。如果您重置i变量并保留原始函数签名,这是合法的。太好了!函数要求:修改任意全局变量以使其正常工作。您的排序函数需要排序的输入才能正确工作?我建议您使用伪代码而不是填鸭式回答。顺便说一句,您只需一个参数就可以更简洁地实现这一点;您可能想尝试一下。(提示:您的递归终止条件应为
    =0
    )@Craigyong为反馈喝彩。如果终止条件为=0,则假设用户没有提供负值,这是我不愿意做的假设;)好的,使用
    >0
    。最坏情况下,只打印负值(也可能有一个简单的条件可以避免).书堆展开有一种简单优雅的方式,我相信这个练习的目的是要传授给学生。但是,有没有可能只使用一个参数进行计数,而这个参数应该是计数的上限?@MahmudUnNabi打印的位置会影响你是否产生向上计数或向下计数的错觉。下降法之所以这样命名,是因为实现是从顶部开始并向下移动的,但如果移动print语句,则会产生相反的效果。
    ascend(int current, int end)
        if current <= end  
            Print number;
            ascend current + 1;
    
    descend(int n)
       if n >= 0
          Print n
          descend n - 1