Java 创建递归算法
我一直在研究编码Bat的当前问题: “我们有一个由块组成的三角形。最上面的一行有1个块,下面的一行有2个块,下一行有3个块,依此类推。用给定的行数递归(无循环或乘法)计算三角形中的块总数。” 我理解问题的要求,也理解递归是如何工作的。例如,如果给我一个递归函数,我可以手工计算,并显示输出结果 这个问题实际上是从一个给定的问题创建递归函数,比如这个问题。我不知道如何实际设置它并递归地执行它。在实际设置递归问题时,是否需要遵循某种规则?我只能找到一些例子来说明递归是如何工作的,而没有说明如何实际解决递归问题。理解如何准备编写实际递归算法的任何帮助都将不胜感激。Java 创建递归算法,java,algorithm,recursion,geometry,Java,Algorithm,Recursion,Geometry,我一直在研究编码Bat的当前问题: “我们有一个由块组成的三角形。最上面的一行有1个块,下面的一行有2个块,下一行有3个块,依此类推。用给定的行数递归(无循环或乘法)计算三角形中的块总数。” 我理解问题的要求,也理解递归是如何工作的。例如,如果给我一个递归函数,我可以手工计算,并显示输出结果 这个问题实际上是从一个给定的问题创建递归函数,比如这个问题。我不知道如何实际设置它并递归地执行它。在实际设置递归问题时,是否需要遵循某种规则?我只能找到一些例子来说明递归是如何工作的,而没有说明如何实际解决
if(rows==1)返回1代码>在这里是无用的
对于递归全局问题,您必须分解问题并找到:
退出规则(可以是示例中的初始值,也可以是某个输入的某个退出条件)
一个分步过程(为了得到下一个输入,您必须如何处理上一个输入)
并将它们组合到一个调用自身的函数中。if(rows==1)返回1代码>在这里是无用的
对于递归全局问题,您必须分解问题并找到:
退出规则(可以是示例中的初始值,也可以是某个输入的某个退出条件)
一个分步过程(为了得到下一个输入,您必须如何处理上一个输入)
并将它们组装到一个调用自身的函数中。对于递归算法
首先设计base
案例,对于该案例,函数应启动堆栈的展开或返回基本值
然后针对非基
情况针对递归
算法,设计实际执行的算法
首先设计base
案例,对于该案例,函数应启动堆栈的展开或返回基本值
然后设计实际执行的算法,对于每个非基本情况尝试以下代码:
#include <iostream>
using namespace std;
int sumf(int row,int sum){
if(row==0) //basecase which ends the recursion.
return sum;
else
{sum=row+sum;
return sumf(--row,sum); // repeating the process.
}}
int main() {
cout<<"sum is: "<<sumf(5,0)<<endl;
system("pause");
return 0;
}
#包括
使用名称空间std;
整数总和(整数行,整数和){
if(row==0)//结束递归的basecase。
回报金额;
其他的
{sum=行+和;
返回sumf(--row,sum);//重复该过程。
}}
int main(){
请尝试以下代码:
#include <iostream>
using namespace std;
int sumf(int row,int sum){
if(row==0) //basecase which ends the recursion.
return sum;
else
{sum=row+sum;
return sumf(--row,sum); // repeating the process.
}}
int main() {
cout<<"sum is: "<<sumf(5,0)<<endl;
system("pause");
return 0;
}
#包括
使用名称空间std;
整数总和(整数行,整数和){
if(row==0)//结束递归的basecase。
回报金额;
其他的
{sum=行+和;
返回sumf(--row,sum);//重复该过程。
}}
int main(){
大致上:
总是看问题,并试图找出它是否可以分割
转化为相同类型的子问题。这是第一个提示,您可以
可能使用递归。本质上,您正在寻找一个较小的
实际问题的实例/版本
因此,递归采用自上而下的方法(从更复杂的问题案例到更简单的问题案例)
当你能找到这样的情况,那么你应该找出什么是
“较大”和“较小”案例与您之间的关系
有你的递归步骤
最后一件事是找出终止条件或什么
是您要停止的最小或最后一个案例
您可能知道这一点,但如果不知道,可能会对您有所帮助。大致如下:
总是看问题,并试图找出它是否可以分割
转化为相同类型的子问题。这是第一个提示,您可以
可能使用递归。本质上,您正在寻找一个较小的
实际问题的实例/版本
因此,递归采用自上而下的方法(从更复杂的问题案例到更简单的问题案例)
当你能找到这样的情况,那么你应该找出什么是
“较大”和“较小”案例与您之间的关系
有你的递归步骤
最后一件事是找出终止条件或什么
是您要停止的最小或最后一个案例
您可能知道这一点,但如果不知道,它可能会对您有所帮助。尝试了解如果为行输入一些值(不同于0或1),会发生什么情况。对于堆栈空间非常有限的系统,如果您使用这样的代码,可能会出现有趣的结果。请阅读小方案的前1/2部分。它有循序渐进的示例和自然递归规则。请尝试了解如果为行(不同于0或1)输入一些值会发生什么情况。如果你为一个堆栈空间非常有限的系统编写这样的代码,会出现什么有趣的情况。请阅读小Schemer的前1/2部分。它有循序渐进的示例和自然递归规则。我将删除这些代码,以便我能够理解我的实际问题。不过,谢谢你。我将删除这些代码,以便我可以了解我的实际问题。谢谢。明白。当实际设计算法本身时,是否有一个好的标准或步骤来遵循递归的思维过程?如果你对使用recurion如此陌生,请在这里查看我的答案。这不是关于任何预定义的计划。这只是一个方法ught过程。理解。当实际设计算法本身时,是否有一个好的标准或步骤来遵循递归的思考过程?如果你对使用recurion如此陌生,请在这里查看我的答案。这不是关于任何预定义的计划。这只是思考过程。我没有投反对票你不是在回答OPs的问题,他是在问关于创建递归算法过程的实用建议