gpt4 book ai didi

f# stackoverflow 项目 euler #4

转载 作者:行者123 更新时间:2023-12-05 01:20:29 27 4
gpt4 key购买 nike

我正在处理 Project Euler 的第四个问题并且遇到了 stackoverflow 异常。我不是在寻求解决问题的帮助,我只是想解释为什么我会收到 stackoverflow 异常。这通常是因为无限递归,但我不相信这次是这种情况(如果我只是瞎了,现在看不到它,请告诉我)。

这是代码:

let Euler4 =

let reverse sum =
let rec loop (n,x) =
if n = 0
then
x
else
loop (n/10,(x*10) + (n%10))

loop (sum, 0);

let isPalindrome arg = (arg = (reverse arg));

let findPalindromes (startx,starty) =
let rec loop (x,y) acc =
let result = if isPalindrome (x * y) then ((x,y) :: acc) else acc;
let next = match (x,y) with
| (x,y) when y = 100 -> (x-1,starty)
| _ -> (x,y-1)
if x = 100 then
result
else
loop (next) result

loop (startx,starty) [];


let value = (999,999);
printfn "%A" (findPalindromes value);

;

最佳答案

您是在“调试”模式还是“发布”模式下进行编译? VS 中的 Debug模式默认关闭尾调用(编译器标志“--tailcalls-”),以保留用于调试的堆栈,但这需要权衡 StackOverflow。您可以切换到“发布”模式,或者

  • 右键单击解决方案资源管理器中的项目属性,选择“属性”
  • 转到“构建”选项卡
  • 确保选择“调试”配置
  • 单击“生成尾调用”框

  • 使用“调试”设置打开尾调用。

    (您的程序在启用尾调用的情况下对我来说运行良好。)

    关于f# stackoverflow 项目 euler #4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1416415/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com