永发信息网

C++递归函数记忆化return的问题

答案:3  悬赏:70  手机版
解决时间 2021-03-24 08:26
  • 提问者网友:回忆在搜索
  • 2021-03-23 15:17
C++递归函数记忆化return的问题
最佳答案
  • 五星知识达人网友:夜余生
  • 2021-03-23 15:56
不用return,函数值不能返回!
int m[100];
 int f(int n)
 {  
  if(n==1)  { return 1; }
  else if(n==2) { return 2; }
  if(m[n]>0)
      return m[n];
  return  m[n]=f(n-1)+ f(n-2);
 }这个程序,似乎是生成斐波那契数列的第n项,但是程序有问题。
n=1,f(n)=1;
n=2,f(2)=2;
n≥3:
m[n]>0,f(n)=m[n],这个值已经求出过,因此直接返回;
m[n]≤0,计算这个斐波那契数列项的值,并且返回这个值。此时使用了递归调用。
在使用这个函数之前,要将m数组,设置成m[1]=1,m[2]=2,以后各项设置为0或任意负数(表示此值不是斐波那契数列的值,没有计算)。
m[0]用不到。
全部回答
  • 1楼网友:青尢
  • 2021-03-23 17:06
如果不return,程序最终是从return m[n];这里返回的结果,截然和 return m[n]=f(n-1)+ f(n-2);这里返回的计算结果不一样,所以需要的正确计算结果必须是 return m[n]=f(n-1)+ f(n-2);返回的。
  • 2楼网友:逐風
  • 2021-03-23 17:00
return是将这个值返回到调用这个函数的函数里面去。你当然可以直接把递归写到主函数就不需要用return了。但是那样的话你其他函数如果需要调用递归你又要写一遍。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯