【发布时间】:2020-01-31 01:33:53
【问题描述】:
所以我正在浏览 SICP 书。我在树递归章节。我用谷歌搜索树递归以获得更多关于它的知识,我偶然发现了这个练习,我很难完全理解它。
练习:
我想上一段有 n 级台阶的楼梯。我每次可以走 1 或 2 步。我可以通过多少种不同的方式上这个楼梯?
答案是:
例如在nis 5的情况下,有8种可能的方式:
1 1 1 1 1
2 1 1 1
1 2 1 1
1 1 2 1
1 1 1 2
1 2 2
2 1 2
2 2 1
这是我无法完全理解的代码块:
(define (count-stairs n)
(cond [(= n 1) 1]
[(= n 2) 2]
[else (+ (count-stairs (- n 1))
(count-stairs (- n 2)) ]) ))
说明过程的图片
我的问题是,为什么会有 + 号? count-stairs(4) + count-stairs(3) 不是 7 个步骤吗?或者我在这里遗漏了一些东西
另外:这是练习的完整链接https://berkeley-cs61as.github.io/textbook/tree-recursion.html
请需要你的帮助!
【问题讨论】:
-
count(3) = count(2) + count(1) 即 3. 和 count(4) = count(3) + count(2) 即 5 . 但 count(5) = count(4) + count(3) 即 8。如果问题是采取 1,2,3 步,那么等式将是 count(n-1) + count(n-2) + count(n-3)
标签: recursion lisp binary-tree sicp