recursion - Cobol 递归程序第 n 个斐波那契数
问题描述
我正在尝试通过在 COBOL 中使用递归技术来编写第 n 个斐波那契数的逻辑。下面是代码。但是我得到错误的结果可能是问题所在?
对于输入 7,它给出的结果为ret-fib= 01 ret-fib= 00 ret-fib= 01 ret-fib= 01 ret-fib= 03 ret-fib= 01 ret-fib= 00 ret-fib= 01 ret-fib= 03 ret-fib= 01 ret-fib= 00 ret-fib= 01 ret-fib= 01 ret-fib= 03 ret-fib= 05 ret-fib= 01 ret-fib= 00 ret-fib= 01 ret-fib= 01 ret-fib= 03 ret-fib= 01 ret-fib= 00 ret-fib= 01 ret-fib= 03 ret-fib= 05 ret-fib= 01 ret-fib= 00 ret-fib= 01 ret-fib= 01 ret-fib= 03 ret-fib= 01 ret-fib= 00 ret-fib= 01 ret-fib= 03 ret-fib= 01 ret-fib= 00 ret-fib= 01 ret-fib= 01 ret-fib= 03 ret-fib= 05 ret-fib= 07
.
预期结果是输入的前 7 个斐波那契数7
。
identification division.
program-id. fib recursive.
data division.
working-storage section.
01 numb pic 9 value 7.
01 result1 pic 9(2).
01 result2 pic 9(2).
local-storage section.
01 num pic 99.
01 ret-fib pic 9(2).
procedure division.
move numb TO num.
EVALUATE num
WHEN 0
move 0 to ret-fib
WHEN 1
move 1 to ret-fib
WHEN OTHER
compute num = num - 1
move num to numb
call "fib" using num
move num to result1
compute num = num - 1
move num to numb
call "fib" using num
move num to result2
compute ret-fib = result1 + result2
END-EVALUATE
display 'ret-fib= ' ret-fib.
goback.
解决方案
在下面的代码中,不num
包含. 这意味着两者都不会有正确的值,除非是偶然的。ret-fib
call
result1
result2
move num to numb
call "fib" using num
move num to result1
compute num = num - 1
move num to numb
call "fib" using num
move num to result2
每次调用fib
和PROCEDURE DIVISION
标题都应该有一个RETURNING
短语来获取ret-fib
适当的值result1
or result2
。
此外,两者result1
和result2
都应该在 中LOCAL-STORAGE SECTION
,因为某些计算 usingresult1
将通过后续调用延迟,并且result1
在这些计算中将使用不同的值 for。
递归计算第 n 个斐波那契数的标准算法使用一个主程序和一个递归程序(函数)。递归程序可以是包含程序(2002)。可以尝试在单个 COBOL 程序中完成这两项工作(使用非标准ENTRY
语句)。它增加了不必要的并发症,因此是不可取的。
为了使用递归获得前 7 个斐波那契数,需要为每个值调用递归程序(函数)0
。6
推荐阅读
- asp.net-core-webapi - 无法访问我发布到 IIS(本地)的 API
- concurrency - Java 11 HttpClient Http2 流太多错误
- javascript - 如何使用对象作为构造函数?
- imacros - 如何评估 imacros 以提取链接上的 id?
- java - 如何从 Java 中的一维数组矩阵中删除一列?
- aws-glue - Glue S3目标路径匹配两级特定子文件夹
- sql - 我在这个访问 SQL 查询中缺少什么?
- node.js - 缩放 mediasoup 选择性转发单元
- r - R rvest 中的 url 和 html 节点的网络抓取循环
- python - 如何检查一个变量是一个列表,并且这个列表中的数据类型都是整数,如果不是,那么相应地抛出异常?