434939575 发表于 2015-3-29 10:46:23

请教一个递归的问题

(defun jc(n)
    (if(<= n 1)
      1.0
      (* n
   ( jc (1-n))
   )
    )
)

(defunc:tt()
(jc 5)
)
;返回120
函数自身调用硬是脑子转不过了。这个返回结果是:120真不知道怎么弄出来的<img src="http://bbs.mjtd.com/static/image/smiley/qq/em06.gif" smilieid="88" alt="" border="0">。请朋友们指点指点。谢谢!

ZZXXQQ 发表于 2015-3-29 12:10:53

这是计算阶乘f(n)=n!=1*2*3*...*n

雪山飞狐_lzh 发表于 2015-3-29 12:16:32

你可以吧递归产生的结果看成数列,即
1! 2! 3! 4! 5!
该数列的表达式为
a(n) = n*a(n-1) n>1
      = 1      n=1
如 求3!时
调用jc(3) <- 调用jc(2) <- 调用jc(1)
返回3*2<- 2*jc(1)=2<- jc(1)=1
   

434939575 发表于 2015-3-29 13:05:45

ZZXXQQ 发表于 2015-3-29 12:10 static/image/common/back.gif
这是计算阶乘f(n)=n!=1*2*3*...*n

谢谢指点!

434939575 发表于 2015-3-29 13:07:36

雪山飞狐_lzh 发表于 2015-3-29 12:16 static/image/common/back.gif
你可以吧递归产生的结果看成数列,即
1! 2! 3! 4! 5!
该数列的表达式为


多谢指导!经常看到一些大师玩这样的。只能慢慢理解琢磨。

zzyong00 发表于 2015-3-29 13:45:16

递归调用,关键是找到退出点,你就知道运行过程和结果了

434939575 发表于 2015-3-29 14:05:18

zzyong00 发表于 2015-3-29 13:45 static/image/common/back.gif
递归调用,关键是找到退出点,你就知道运行过程和结果了

谢谢!(setqn 1 )(* n (jc (1- n)))。这样返回1.我认为(1- n)=0 。(jc (1- n))返回1 。还是没透彻。

zzyong00 发表于 2015-3-29 16:44:23

当然函数返回1时,就开始“收网”了
页: [1]
查看完整版本: 请教一个递归的问题