调用cxxfunction本身的递归

时间:2017-10-24 13:54:23

标签: r recursion inline rcpp strassen

我的R中的cxx函数有问题。我想自己调用它,不幸的是,编译器给了我这个错误信息:

  

' Matmult2'未在此范围内声明

问题还在于在cxx函数中调用AppId

我原来的问题与strassen算法有关,我想用RCPP / Inline递归调用。 非常感谢你的帮助!

`

Matmult2

&#39)

`

1 个答案:

答案 0 :(得分:1)

你不能做直接递归,因为我们插入的粘合代码会创建一个被称为的包装函数---但你不希望递归地调用包装器,你希望你的函数能够叫做。所以你也需要:一个从R调用的包装器和一个C(++) - 只有递归函数 从你的包装器调用,并调用它自己。

如果切换到Rcpp属性,它也可以。在这里,我们使用递归函数的标准承载,Fibonacci序列:

settings_data.json

(我使用R> library(Rcpp) R> cppFunction("double fib(double n) { if (n < 2) return n; return(fib(n-1) + fib(n-2)); }") R> sapply(0:10, fib) [1] 0 1 1 2 3 5 8 13 21 34 55 R> 代替double,因为后者溢出了。)