F# 在F中反转整数#
我正在尝试反转F#中的整数。我有以下方法:F# 在F中反转整数#,f#,F#,我正在尝试反转F#中的整数。我有以下方法: //let the number be n rev = 0 while(n != 0){ rev = rev * 10 + n % 10; n /= 10; } // rev now contains the reverse integer of n 我是F#的新手,不知道实现这个实现的惯用语法。我不想通过先将数字转换为字符串来反转数字。如何以惯用的方式在F#中实现此实现?创建一个递归的内部函数,您可以这样调用它 let rever
//let the number be n
rev = 0
while(n != 0){
rev = rev * 10 + n % 10;
n /= 10;
}
// rev now contains the reverse integer of n
我是F#的新手,不知道实现这个实现的惯用语法。我不想通过先将数字转换为字符串来反转数字。如何以惯用的方式在F#中实现此实现?创建一个递归的内部函数,您可以这样调用它
let reverse n =
let rec revInner n rev =
match n with
| 0 -> rev
| _ -> revInner (n / 10) (rev * 10 + n % 10)
revInner n 0
reverse 43221 // -> 12234
无论何时,只要有命令式循环,例如
while
就可以将其转换为递归函数。在这种情况下,您需要一个递归调用的内部函数。第一个模式匹配在执行时处理的终止条件,第二个模式匹配在执行时处理核心:
let revNum number =
let rec loop rev = function
| 0 -> rev
| fwd -> loop (rev*10 + fwd%10) (fwd/10)
loop 0 number;;
谢谢你的回答。我还有一个问题。在F#中,递归优于迭代循环吗?如果是,你能告诉我为什么吗?是的。使用递归,通过在下一个递归调用中提供状态更改作为参数,可以避免可变值。函数式语言的吸引力和力量之一是不变性。当您从命令式和默认的可变语言过渡时,这是帮助grok开发函数式语言的首要挑战之一。