codecamp

C++ 思路跳跃

跟踪程序执行流程是阅读代码的一种方式。另一种可选的方式我称之为“思路跳跃”。 当你遇到一个函数调用,我们不去跟踪执行流程,而是假定函数工作正常并返回合适的值。

事实上,我们前面已经使用过思路跳跃,比如调用内置函数。当调用cos或exp时,我们并没有检查函数的实现。我们只是假定这些函数能正常工作,因为设计库的都是很厉害的程序员。

调用自己写的函数也是如此。例如,在5.8节我们写了一个函数isSingleDigit用来判断一个数是否处于0和9之间。只要能够通过测试或者检查代码确定这个函数是正确的,我们就能再次使用这个函数而不需要检查代码。

这个方法同样适用于递归函数。碰到递归调用时,我们不是跟踪执行流程,而应假定递归调用正常工作(能产生正确的结果),然后提出问题,“假设能够计算n-1的阶乘,能否计算n的阶乘?”。很明显,可以通过n-1乘以n来计算n的阶乘。

当然,当你甚至还没有编写完的时候就假设函数正常工作可能有点奇怪,但是这也是我称之为“思路跳跃”的原因。

C++ 深入递归
C++ 又一个例子
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }