2 回答
TA贡献883条经验 获得超454个赞
这就是“递归”。
最后的结果其实就是从1加到10,所以结果是55。
getWordNumber函数中的printf("%d\n",n)打印的就是每次调用传入的参数,确实会依次输出10,9,8,7,6,5,4,3,2,1,这也没错啊。
55当然不是存在n里面,最终从getWordNumber(10)返回的值是55,被保存到num中。
也许你没理解递归的执行流程:
递归函数中首先规定一个递归截止条件,这个代码中就是if(n == 1) ,随后再次调用自己(当然是传入不同的参数)。
重点是:这里再次调用自己时,程序执行流程进入到另一个getWordNumber函数中,但前次调用的getWordNumber函数是没有结束的,只是暂停在return getWordNumber( n - 1 ) +n;语句那里,等待getWordNumber( n - 1 )返回。
这样不断调用自己,直到某次调用时传入的参数 n 就是 1 ——遇到了递归截止条件,于是函数返回 1 到上一次调用中,这个“上一次调用”的函数原本是暂停在 return getWordNumber( n - 1 ) +n; 这里,这样 getWordNumber( n - 1 ) 就是函数返回值(也就是1),所以就返回了 1 + n,同样是返回到上级调用中...... 这样这一串调用一直返回到最初的getWordNumber函数中,最终返回的结果就等于是之前所有结果的和。
我在老问答区有一个回答,里面举了一个具体的例子,虽然不是关于这个代码的,但含义是完全一样的,你可以参考:http://www.imooc.com/qadetail/90499
如果还是不懂,就再写出来具体哪里不明白。
TA贡献11条经验 获得超6个赞
return ((getWordNumber( n - 1 ) )+n); ------>>return {[getWordNumber( n - 1 ) ]+n}; 前面加了两对小括号,后面加了一对中括号和一对大括号,后面加的“不合法的括号种类”是为了容易理解。不知道这样对你有没有什么提示性的帮助。
- 2 回答
- 1 关注
- 1449 浏览
添加回答
举报