Ruby方法递归

Ruby方法递归教程

方法递归就是一个 方法 在方法体内又调用了自身,我们称为方法的递归调用。

Ruby方法递归条件

  • 执行一个方法时,就创建一个新的受保护的独立空间(新方法栈)。
  • 方法的局部变量是独立的,不会相互影响。
  • 递归必须向退出递归的条件逼近,否则就是无限递归了。
  • 当一个方法执行完毕,或者遇到 return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法本身也会被系统销毁。

案例

Ruby方法递归

Ruby 方法递归,实现求阶乘

#!/usr/bin/ruby -w # -*- coding : utf-8 -*- puts "HaiCoder(www.haicoder.net)" def factorial(num) result = 0 if num > 0 result = num * factorial(num-1) return result end return 1 end factorialResult = factorial(5) printf("factorialResult = %d\n", factorialResult)

程序运行后,控制台输出如下:

12_Ruby方法递归.png

我们定义了一个 factorial 方法,该方法的参数是一个数字,在方法体里面我们使用 if 判断,如果当前参数的值大于 0 的话,我们就再次调用自己,并且参数的值是当前值减一,最后返回计算的结果。

如果当前参数的值不大于 0 的话,那么就直接返回 1。这里的 if 条件里面的逻辑就是方法 factorial 自己调用自己,这就构成了递归调用。同时不满足 if 条件的情况,就是递归调用的出口。

Ruby方法递归

Ruby方法递归,实现斐波那契数列

#!/usr/bin/ruby -w # -*- coding : utf-8 -*- puts "HaiCoder(www.haicoder.net)" def fibonacci(num) if num <= 1 return 1 else return fibonacci(num-1) + fibonacci(num-2) end end fibonacci5 = fibonacci(5) printf("fibonacci5 = %d\n", fibonacci5)

程序运行后,控制台输出如下:

13_Ruby方法递归.png

我们定义了一个 fibonacci 方法,该方法的参数是 int,返回值也是 int,在方法体里面我们使用 if 判断,如果当前参数的值小于等于 1 的话,那么我们就将结果赋值为 1,否则我们就再次调用自己。

Ruby方法递归总结

方法递归就是一个方法在方法体内又调用了自身,我们称为方法的递归调用。方法递归最重要的就是一定要找到递归调用的出口。