大家好,欢迎来到IT知识分享网。

一、阶乘函数
数学上,尤其是组合数学,有一个相当常用的函数叫做阶乘(Factorial)。阶乘函数的参数是一个自然数,它会返回1与此数之间所有数的乘积。比如,6的阶乘是 1 × 2 × 3 × 4 × 5 × 6 = 720 。这相当有趣,因为对我们来说,它可以用一种递归函数来表示。
ELM榆木语言是函数式编程语言,函数式编程没有循环命令,用递归实现循环,下面的榆木的代码:
import Debug import Html exposing (text) factorial n = case n of 0 -> 1 _ -> n*factorial (n-1) main = text <| Debug.toString <| factorial 6
显示结果为 720
二、双阶乘
双阶乘意为:从1(或2)隔一个数字乘一个,一直乘到n。比如,8的双阶乘是 8 × 6 × 4 × 2 = 384,
7的双阶乘是 7 × 5 × 3 × 1 = 105. 下面用榆木实现一个双阶乘函数doublefactorial.
import Debug import Html exposing (text) doublefactorial n = case n of 0 -> 1 1 -> 1 _ -> n*doublefactorial (n-2) main = text <| Debug.toString <| doublefactorial 7
显示结果为 720

三、汉诺塔问题
三根柱子。在一根柱子上,从上到下,由小到大叠放着64个盘子。要把这些盘子搬到另一根柱子上。规则是:一次只能移动一个圆盘。大盘不能叠在小盘的上面。问:移动次数最小的方案?
先用榆木语言实现:
import Debug import Html exposing (text) hanota : Int -> Int hanota n = case n of 1 -> 1 _ -> hanota (n-1)*2+1 --注:分解为子问题再递归 main = text <| Debug.toString <| hanota 10
显示为 1023
再用python语言实现:
a = "a" b = "b" c = "c" def hannota(n,a,b,c): count = 0 if n == 1: return 1 count = hannota (n-1,a,c,b) + count count = hannota (1,a,b,c) + count count = hannota(n-1,b,a,c) + count return count print("最少移动次数:",lastcount = hannota(10,a,b,c))
体会是:榆木语言实现汉诺塔要比python精简点,特别是python要定义a,b,c三个无用但必要的参数,C++也一样,可能这就是函数式编程与面向对象式编程的不同。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/176603.html