Math 分段递归函数到非递归函数的转换?

Math 分段递归函数到非递归函数的转换?,math,recursion,linear-algebra,Math,Recursion,Linear Algebra,我的数学教育仅限于微积分,我发现自己希望将分段递归函数转换为无递归函数。有没有办法做到这一点而不依赖于模式发现或类似的暴力?(这有可能吗?) 具体来说,函数是:(对于所有整数) f(0)=1 f(1)=1 f(2)=2 f(2n)=f(n)+f(n+1)+n(对于n>1) f(2n+1)=f(n-1)+f(n)+1(对于n>=1) 我知道,但涉及矩阵的答案我无法理解。如果有需要较少知识的解释,我将不胜感激。编辑: 根据您的评论,您可能需要一些快速解决方案,而不是必要的交互解决方案。我已经检查了递

我的数学教育仅限于微积分,我发现自己希望将分段递归函数转换为无递归函数。有没有办法做到这一点而不依赖于模式发现或类似的暴力?(这有可能吗?)

具体来说,函数是:(对于所有整数)
f(0)=1
f(1)=1
f(2)=2
f(2n)=f(n)+f(n+1)+n(对于n>1)
f(2n+1)=f(n-1)+f(n)+1(对于n>=1)

我知道,但涉及矩阵的答案我无法理解。如果有需要较少知识的解释,我将不胜感激。

编辑:
根据您的评论,您可能需要一些快速解决方案,而不是必要的交互解决方案。我已经检查了递归树的大小——它小得惊人——10^18大约250(大约-
log2(M)
递归级别,第I个级别大约
3+I
值)。所以我用记忆(一种DP)实现了递归,这种方法在M=2^80-1~10^24时运行得非常快

M = 1208944266358702884257791
Result = 24682648998311664639366438  
Map Size 321
伪代码:

  function F(Key)
     if Map.Contains(Key)then
        return Map.Value[Key]
      else
         usual recursion calls to get Result
         Map.Add(Key, Result)
老生常谈直截了当地回答问题:
如果你不想用高等数学发现一般解,你必须存储计算值。这是一个用Delphi编写的使用队列作为存储的非递归(迭代)函数示例:

function ExoticFib(m: Integer): Integer;
var
  Q: TQueue<Integer>;
  n, fnm1, fn, fnp1, n2, n21: integer;
begin
  if m <= 3 then
    Exit(m + Ord(m = 0));  //return 1, 1, 2, 3

  Q := TQueue<Integer>.Create;
  Q.Enqueue(3);
  fn := 1;
  fnp1 := 2;

  for n := 2 to m div 2 do begin
    fnm1 := fn;      //forget the oldest value
    fn := fnp1;
    fnp1 := Q.Dequeue;  //here we have f(n-1), f(n), f(n+1)
    n2 := fn + fnp1 + n;
    Q.Enqueue(n2);
    n21 := fnm1 + fn + 1;
    Q.Enqueue(n21);
  end;

  if Odd(m) then // for m = 2k+1
    Result := n21
  else           // for m = 2k
    Result := n2;

  Q.Free;
end;
函数ExoticFib(m:Integer):整数;
变量
Q:TQUUE;
n、 fnm1,fn,fnp1,n2,n21:整数;
开始

如果m这个问题似乎是离题的,因为它是关于数学的,而不是关于编程的。
2n
使这个问题比你链接的问题更难。一旦这个问题被迁移到math.se,你可能会有更好的运气。你的重复关系比你链接的帖子中的要复杂得多。首先,您对元素的定义不依赖于前面的元素,而是依赖于
n/2
,因此您将无法用相同类型的矩阵表示相同的递归。然后,有两个公式,而不是一个用于偶数和非偶数的公式。最后,您对2个连续元素的定义取决于
n/2
处的3个连续元素(即使使用
{2n-1,2n}
{2n+1,2n+2}
而不是
{2n,2n+1}
)。@JohnDrake:既然这样不允许PMs,而且您没有在个人资料上留下任何联系信息,我就在这里发消息给您。我想知道你是否找到了解决你以前/以前帖子的方法;我面临着同样的问题,不知道如何着手解决它。谢谢你,虽然我有一个类似的python解决方案,但速度不够快,因为我需要计算n~10^24的值。哎哟,你可能需要数学解决方案。您评估过递归调用树的大小吗?