汤圆咖啡喵 2016-07-06 17:26 采纳率: 100%
浏览 3479
已采纳

[JAVA]for循环换成递归有没有什么套路?反之呢?

本人是刚刚自学java过来的,偶然机会看到一个视频,说有的时候需要使用递归,
尤其是在java中的删除多级目录,于是我就开始琢磨,有没有什么套路呢,
现在有一个简单案例,就是把1+到100的等差数列求和,
首先是简单的for循环写法:

    @Test
    public void testAdd(){
        String str="1";
        System.out.println(str);
        int result=0;
        for(int i=2;i<=100;i++){
            str+=("+"+i);
            result+=i;
            System.out.println(str+"="+(result+1));
        }
    }

这是改写的递归法,
每一步是输出结果
然而这简单的算法,我却琢磨了很久,感觉里面有一些东西非常接近,

递归写法**

 public class DemoAdd {
    static int result=1;
    public static int add(int n) {
        if (n < 100) {
            result += (++n);
            System.out.println(result);
            return add(n);
        } else {
            return 0;
        }
    }

    public static void main(String[] args) {
        add(1);
    }

}

现在问题来了,就是新手在学习递归方法的时候,有没有什么思维套路,
不可能每次需要使用的时候都要琢磨半天吧,
比如我需要先把for循环写出来吗,或者需要打什么草稿,然后怎么做,请高手指点一下,

  • 写回答

9条回答

  • threenewbee 2016-07-06 19:21
    关注
     循环可以非常简单地转换为递归,只有尾递归可以机械转换为循环,否则需要借助堆栈。
    转换方式
    比如有如下函数:
    返回值 foo()
    {
    局部变量列表
    while (条件)
    {
    代码块
    }
    return 返回值
    }
    改写成递归
    返回值 foo(局部变量列表)
    {
    if (!条件) return 返回值;
    代码块
    return foo(局部变量列表);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题