ruby 使用递归方法,计算n 的阶乘

递归:指在当前方法内调用自己,设置停止条件的这种现象。

递归的分类: 递归分为两种,直接递归和间接递归。

优点:使用递归编写的程序简洁、结构清晰,程序的正确性很容易证明,不需要了解递归调用的具体细节。

缺点:递归函数在调用的过程中,每一层调用都需要保存临时性变量和返回地址、传递参数,因此递归函数的执行效率低。

简单递归
求n的阶乘、斐波那契数列、求n个数的最大、数制转换、求最大公约数都属于简单递归。

计算阶乘:例如 n = 3
结果为 3 x 2 x 1 = 6

n = 5 . 结果为 5 x 4 x 3 x 2 x 1 = ...

定义n m变量。求n的阶乘
def recursive n
  puts "-----------n is #{n}------"
  #设置停止的条件
  if n == 1
    return 1
  end
  #不停止就调用自身 recursive n
  result = n * recursive(n - 1)
  puts "---------result is #{result} ----n-1 is #{n - 1}"
  return result
end

#设置m的初始值为0.递增
#调用方法 实现 阶乘
puts recursive 4

puts "----------------分割线===============for in"
#定义变量n  求n的阶乘 使用for in的方法
def recursive_for_in  n
  puts "-------------n is #{n}"
  #设置停止条件 n=1时 停止
  if n == 1
    return 1
  end
  #调用自身方法实现阶乘
  for i in 2..n
    result = i * recursive_for_in(i - 1)
    puts "result is #{result} -------i is #{i}"
  end
  return result
end

puts recursive_for_in 5

puts "-============================分割线-------------------loop do"
#定义变量n 求n的阶乘,使用loop do的方法
def  recursive_loop_do n
  puts "-----n is #{n}------"
  result = 0
  loop do
    puts "---------n is #{n}"
    #调用自身方法
  if result == 0
      puts "-------result = n*(n-1)  result is #{ n*(n - 1)}"
      result = n * (n - 1)
    else
      puts "----------result = result * (n-1)  result is #{result * (n - 1)}"
      result = result * (n - 1)
    end
    #设置停止条件
    n = n - 1
    if (n -1) == 0
      break
    end
  end
  return result
end
puts recursive_loop_do 4

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值