博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在递归中使用Continuation来避免StackOverflow(查找第K大的数)
阅读量:5156 次
发布时间:2019-06-13

本文共 1583 字,大约阅读时间需要 5 分钟。

         前段时间从涛哥那学了一招——在递归里面使用Continuation 来避免大量的局部变量的使用,从而避免StackOverflow. 下面是一个小的例子:查找整数数组中的第K大的数:

在递归中使用Continuation来避免StackOverflow(查找第K大的数):

[
]module Kmaxtype public Sort() = static member KMax(iArr : int array, kmax : int) = let iLen = iArr.Length match kmax with | small when small <= 0 -> failwith "too small" | larger when larger > iLen -> failwith "too large" | _ -> () let rec getMax iarr currMax contFun= match currMax with | 1 -> iarr |> Array.max | _ -> let max = iarr |> Array.max //delete the max item let restArr = let currMaxIndex = iarr |> Array.findIndex(fun x -> x = max) //get the sub array from 0 to currMaxIndex let newArrleft = Array.sub iarr 0 currMaxIndex //get the sub array form currMaxIndex+1 to end let newArrrigth = Array.sub iarr (currMaxIndex + 1) (iarr.Length - 1 - currMaxIndex) //concat these two array Array.append newArrleft newArrrigth let currMax = contFun(currMax - 1) getMax restArr currMax contFun getMax iArr kmax id

代码中的contFun是一个函数,在使用递归函数getMax时,给出相应的具体函数,本例中使用的是F#本身定义的操作函数:id,它的作用就相当于let customFun x = x, 也就是返回原参数的值。还是一样, 做个笔记~ :)。

转载于:https://www.cnblogs.com/FsharpZack/archive/2012/11/08/2760385.html

你可能感兴趣的文章
springboot 修改页面不重启
查看>>
交互式编程之Golang基本配置(Jupyter-notebooks Golang)
查看>>
celery
查看>>
minio 搭建blob
查看>>
一个Demo带你彻底掌握View的滑动冲突
查看>>
Codeforces Round #207 (Div. 1) B. Xenia and Hamming(gcd的运用)
查看>>
【学习记录】第一章 数据库设计-《SQL Server数据库设计和开发基础篇视频课程》...
查看>>
【题解】最近公共祖先
查看>>
六省联考2017 Day1
查看>>
简单的全排列问题(给初学者)
查看>>
C++11多线程03
查看>>
应用程序正在为首次使用计算机做准备
查看>>
从小编程,到架构师,我们应该具备什么
查看>>
习题1.29 (积分方法的优化---simpson规则)
查看>>
jquery批量控制form禁用的代码
查看>>
根据运算符优先级解析SQL规则表达式
查看>>
oc61--block
查看>>
android 55
查看>>
二叉排序树
查看>>
Javascript学习历程之事件
查看>>