递归算法--如何一步一步理解递归(1)
2017-09-06 18:28
239 查看
递归:
概念:递归算法是吧问题转化为规模缩小了的同类问题的子问题。然后递归调用函数来表示问题的解。
简单的说就是函数自己自己的过程。
如何设计递归算法:
–>确定递归公式
–>确定结束条件
递归的一般模式:
procedure aaa(k:integer); begin if k=1 then (边界条件及必要操作) else begin aaa(k-1); (重复的操作); end; end;
通过案例理解:
阶乘:阶乘公式: n! = n * (n-1) * (n-2) * ...* 1(n>0)
核心代码:
public int recursive(int i){ int sum = 0; if (0 == i) return (1); else sum = i * recursive(i-1); return sum; }
具体代码实现:
public class demo1 { public static int recursive(int i){ int sum = 0; if (0 == i) return (1); else sum = i * recursive(i-1); return sum; } public static void main(String[] args) { int sum=recursive(3); System.out.println(sum); } }
运行结果:
6
代码解读:
按照我现在的理解,引入一个方法入栈的概念:
下面的这个图中,就是表示的是方法入栈的顺序:我们从main方法开始程序,main进入栈当中,然后按照我下面的截图,我们可以发现,进入栈的顺序依次是:
recursive(3);–>
recursive(2);–>
recursive(1);–>
recursive(0);
当运行到
recursive(0);的时候,由于
if (0 == i) return (1);所以recursive方法返回1,这个时候,然后我们的方法是不是要依次出栈了?
所以–>
所以最后的结果输出为6.
相关文章推荐
- 递归算法--如何一步一步理解递归(2)--全排列
- 递归算法详细分析(如何更好的理解递归)
- 如何理解递归?
- 如何去理解递归,想到递归,运用递归
- 如何理解递归
- 如何理解递归
- 如何理解递归
- 如何通俗的理解递归
- 全排列的递归算法(以此加深对递归的理解)
- 如何理解汉诺塔的递归?
- 【递归算法】人脑理解递归
- 摘要:我们经常会用到递归函数,但是如果递归深度太大时,往往导致栈溢出。而递归深度往往不太容易把握,所以比较安全一点的做法就是:用循环代替递归。文章最后的原文里面讲了如何用10步实现这个过程,相当精彩。本文翻译了这篇文章,并加了自己的一点注释和理解。
- 如何通俗理解递归
- 由合并排序算法谈如何理解递归
- 到底如何理解递归?
- 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念
- 如何理解递归
- [算法]递归算法中sort的递归理解以及原地归并和自顶向下递归排序
- tensorflow里面共享变量、name_scope, variable_scope等如何理解
- 【Java笔记】——如何理解线程