今天在网上偶然看到关于如何不使用额外空间判断一个整数是否是回文数的方法,非递归的解法简明易懂。紧接着给了一个递归的解法,想了半天没明白是怎么实现的,怒在ide里一跑恍然大悟…果然递归的力量是无穷的…简单来说就是通过递归先取出最左边一位,然后和最右边一位进行比较,之后砍掉最右位,函数返回,最左边两位取末位继续此过程。下面是代码
bool isPalindrome(int x, int &y) { if (x < 0) return false; if (x == 0) return true; if (isPalindrome(x/10, y) && (x%10 == y%10)) { y /= 10; return true; } else { return false; } } bool isPalindrome(int x) { return isPalindrome(x, x); }
( 其实这样用的空间比非递归多不少,尤其是数字比较长的时候
感觉网站快了不少,还有新的syntax highlighter,新的twitter widget,不错。
来个Lisp版的palindrome:
(defun palindrome (x)
(do ((x x (cdr x))
(y x (cddr y))
(z () (cons (car x) z)))
((null (cdr y))
(equal z (if y (cdr x) x)))))
缩进掉了……凑合着看吧,反正不是Python。。
用Lisp的都是大神…..