汤圆咖啡喵 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条)

报告相同问题?

悬赏问题

  • ¥20 数学建模,尽量用matlab回答,论文格式
  • ¥15 昨天挂载了一下u盘,然后拔了
  • ¥30 win from 窗口最大最小化,控件放大缩小,闪烁问题
  • ¥20 易康econgnition精度验证
  • ¥15 msix packaging tool打包问题
  • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能