竹逸 发表于 2022-9-19 21:37:06

关于递归算法的理解

本帖最后由 竹逸 于 2022-9-19 21:45 编辑

用递归算阶乘:

5! == 5*4*3*2*1

4! == 4*3*2*1

3! == 3*2*1

2! == 2*1

1! == 1

可以看出 4! 是 5! 中的一部分,所以 5! 可以写成 5*4!,那么 4! 也可以写成 4*3!,以此类推出公式:n*f(n-1)。

当n==1时,则return 1,即向内递进到最底层后,得到一个结果(f(n)的返回值 1),然后在向外一层一层的return,把内一层的计算结果返回给外一层,原路逐层返回。

也就是说当 return 结果为1时,即f(1) == 1时,n为2,把结果1返回给n为2的那层,即f(1)*2,而1*2的结果是n为3那层,即f(2)*3,依次得出为1*2*3*4*5,最后再把结果返回。

我这么理解对吗?

人造人 发表于 2022-9-19 21:44:55

对的,另外你可以调试一下程序,一步一步执行代码,亲自体验一下这个一层一层向下调用,一层一层向上返回,这样会对递归更加印象深刻
提示,层数不要太深,不然你跟着跟着就不知道跟到哪一层了,^_^
先从1层开始,然后试试2层,3层,这样一层一层的加

ikun小吴 发表于 2022-9-19 21:46:21

你好

竹逸 发表于 2022-9-19 22:01:53

人造人 发表于 2022-9-19 21:44
对的,另外你可以调试一下程序,一步一步执行代码,亲自体验一下这个一层一层向下调用,一层一层向上返回, ...

我发现自己有个很大的毛病,就是喜欢用脑子思考程序的过程,却不会去一步步调式程序,我知道这样非常的不好,就是懒{:5_99:}

竹逸 发表于 2022-9-19 23:14:35

ikun小吴 发表于 2022-9-19 21:46
你好

竹逸 发表于 2022-9-19 23:15:32

汉诺塔的问题,我脑子不够用了
页: [1]
查看完整版本: 关于递归算法的理解