阶乘、双阶乘、汉诺塔问题的ELM榆木、python等语言的代码解答

阶乘、双阶乘、汉诺塔问题的ELM榆木、python等语言的代码解答print 体会是 榆木语言实现汉诺塔要比 python 精简点 特别是 python 要定义 a b c 三个无用但必要的参数 C 也一样 可能这就是函数式编程与面向对象式编程的不同

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

阶乘、双阶乘、汉诺塔问题的ELM榆木、python等语言的代码解答

一、阶乘函数

数学上,尤其是组合数学,有一个相当常用的函数叫做阶乘(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

阶乘、双阶乘、汉诺塔问题的ELM榆木、python等语言的代码解答

三、汉诺塔问题

三根柱子。在一根柱子上,从上到下,由小到大叠放着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

(0)
上一篇 2025-04-19 12:00
下一篇 2025-04-19 12:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信