Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建递归算法_Java_Algorithm_Recursion_Geometry - Fatal编程技术网

Java 创建递归算法

Java 创建递归算法,java,algorithm,recursion,geometry,Java,Algorithm,Recursion,Geometry,我一直在研究编码Bat的当前问题: “我们有一个由块组成的三角形。最上面的一行有1个块,下面的一行有2个块,下一行有3个块,依此类推。用给定的行数递归(无循环或乘法)计算三角形中的块总数。” 我理解问题的要求,也理解递归是如何工作的。例如,如果给我一个递归函数,我可以手工计算,并显示输出结果 这个问题实际上是从一个给定的问题创建递归函数,比如这个问题。我不知道如何实际设置它并递归地执行它。在实际设置递归问题时,是否需要遵循某种规则?我只能找到一些例子来说明递归是如何工作的,而没有说明如何实际解决

我一直在研究编码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的问题,他是在问关于创建递归算法过程的实用建议