小编Jim*_*myM的帖子

是否值得在方法中使用按位运算符?

我是Java的新手(一般编程,我之前的经验是使用ActionScript 2.0和一些简单的JavaScript),我正在通过Java慢慢地,有条不紊地工作:Herbert Schildt的初学者指南.这是一本令人难以置信的书.

首先,我终于理解了或多或少的位运算符(我在ActionScript 2.0中首次遇到的),并且它们比某些和的其他方法更有效.

我的问题是,是不是更有效地使用,使用,比如说,一个右移,一个方法来执行您的所有部门/ 2(或部门/偶数)与许多计算一个大的程序(在这种情况下,一个庞大的RPG),或者简单地使用标准数学运算是否更有效,因为编译器会为您优化它?

或者,我是否完全提出了错误的问题?

java optimization bitwise-operators

5
推荐指数
1
解决办法
767
查看次数

为什么这个尾递归函数变得更加复杂?

所以,我正在摆弄一些基本的数学,我想要一个函数来在基数之间进行转换.

我写了这个函数:

(define (convert-base from to n)
  (let f ([n n])
    (if (zero? n)
        n
        (+ (modulo n to) (* from (f (quotient n to)))))))
Run Code Online (Sandbox Code Playgroud)

这适用于我的所有个人测试<基础10,并且就我所能想象的功能完全正常的测试>基数10,如果我只是添加了对其他数字的支持.

令我感到困惑的是,当我试图使函数尾递归时,我最终得到了这个混乱(我为SO的好处添加了一些间距,因为我的代码通常不清晰或漂亮):

;e.g. 10 2 10 should output 1010, 10 8 64 should output 100 etc.

(define (convert-base-tail from to n)
  (let f ([n n]
          [acc 0]
          [zeros 0])

    (begin (printf "n is ~a. acc is ~a. zeros are ~a.\n" n acc zeros)

    (cond [(zero? n) (let exp 
                       ([x acc]
                        [shft zeros])
                       (if (zero? shft) …
Run Code Online (Sandbox Code Playgroud)

recursion tail-recursion racket

1
推荐指数
1
解决办法
92
查看次数