pascal递归过程
答案:2 悬赏:80 手机版
解决时间 2021-01-20 12:40
- 提问者网友:轮囘Li巡影
- 2021-01-20 09:15
pascal递归过程
最佳答案
- 五星知识达人网友:山君与见山
- 2021-01-20 10:27
var x,s:real;
n:longint;
procedure p(n:real);
begin
if(n=1)then
s:=x/(1+x)
else begin
p(n-1);
s:=x/(n+s);
end;
end;
begin
readln(x,n);
p(n);
writeln(s:0:6);
end. 刚才没看到用过程,改一下.
追问为什么不把x和s加到procedure的形式参数表里边呢追答没有必要这么做.
事实上,任何函数都可以写成等效的过程,反之亦然:
function (arg1,arg2,arg3...):ret
可以写成:
procedure (arg1,arg2,arg3...; var ret);
但是要合理使用函数和过程的特点才是正道.这里,s其实是一个不断迭代的量,作为参数在意义上不合逻辑.x至始到终都没有任何改变,也没有必要加入参数中去.
n:longint;
procedure p(n:real);
begin
if(n=1)then
s:=x/(1+x)
else begin
p(n-1);
s:=x/(n+s);
end;
end;
begin
readln(x,n);
p(n);
writeln(s:0:6);
end. 刚才没看到用过程,改一下.
追问为什么不把x和s加到procedure的形式参数表里边呢追答没有必要这么做.
事实上,任何函数都可以写成等效的过程,反之亦然:
function (arg1,arg2,arg3...):ret
可以写成:
procedure (arg1,arg2,arg3...; var ret);
但是要合理使用函数和过程的特点才是正道.这里,s其实是一个不断迭代的量,作为参数在意义上不合逻辑.x至始到终都没有任何改变,也没有必要加入参数中去.
全部回答
- 1楼网友:山有枢
- 2021-01-20 12:01
递归过程要使用全局变量保存结果,如果你会写递归函数的话,那就不难。追问
这是我写出的程序
不知道哪个地方栈溢出了
这个应该怎么修改啊
这是我写出的程序
不知道哪个地方栈溢出了
这个应该怎么修改啊
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯