码迷,mamicode.com
首页 > 其他好文 > 详细

Ruby-递归和尾递归

时间:2015-04-29 21:25:16      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

递归和迭代的区别

递归:

1)递归就是在过程或函数里面调用自身;

2)在使用递归时,必须有一个明确的递归结束条件,称为递归出口.

迭代:

利用变量的原值推算出变量的一个新值.如果递归是自己调用自己的话,迭代就是A不停的调用B.

 

1、斐波那契 1 1 2 3 5 8

     递归算法

def fibo1(n)
  if n==1 or n==2
   return 1;
  end
  fibo1(n-1)+fibo1(n-2)
end
puts fibo1(6);

尾递归,把每次得出的结果带入下次的运算,和迭代很像。

def fibo2(n,g,k)
  puts k
  a=k
  k=g+k
  g=a
  if n==1
    return k
  end
  fibo2(n-1,g,k)
end

puts fibo2(5,0,1)

迭代

def fibo3(n)
  j,k=0,1
  puts j 
  puts k

  for i in 1..n
     a=k
     k=j+k
     j=a
    puts k
  end
end

2、阶乘

尾递归

def fact(n,g)
  if n==0
   return g;
  end
  fact(n-1,n*g)
end

Ruby-递归和尾递归

标签:

原文地址:http://www.cnblogs.com/yangleiWPF/p/4466851.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!