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