> For the complete documentation index, see [llms.txt](https://docs.r.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.r.xyz/glider-ide/api/callable/callable.callee_functions_recursive.md).

# Callable.callee\_functions\_recursive()

Returns a Functions object representing the functions through which the function could be called

`callee_functions_recursive() ->` [`Functions`](/glider-ide/api/functions.md)

The function is the *recursive*/*inter-procedural* variant of [callee\_functions()](/glider-ide/api/callable/callable.callee_functions.md), meaning it works recursively. It returns the Functions object representing all the functions through which the function could be called.&#x20;

The difference between `callee_functions_recursive()` and `callee_functions()` the later one will only return direct callee functions, while the **recursive** version will find all the functions recursively that eventually call the target function.

## Query Example

```python
from glider import *


def query():
    functions = Functions().with_name("requestRandomness").exec(1)

    return functions[0].callee_functions_recursive().exec()
```

For the function:

```solidity
function requestRandomness(bytes32 _keyHash,uint256 _fee,uint256 _seed)
    public returns (bytes32 requestId)
  {
    LINK.transferAndCall(vrfCoordinator,_fee,abi.encode(_keyHash,_seed));
    
    uint256 vRFSeed  = makeVRFInputSeed(_keyHash,_seed,address(this),nonces[_keyHash]);
    
    nonces[_keyHash] = nonces[_keyHash].add(1);
    return makeRequestId(_keyHash,vRFSeed);
  }
```

The output will be:

## Example Output

<figure><img src="https://2237101709-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDX4Ojc4j1ef51TUAtYOx%2Fuploads%2F4dlQPlFoViaSutlybkyu%2FScreenshot%202025-08-21%20at%2012.38.28%E2%80%AFPM.png?alt=media&amp;token=f42410c8-21ac-4d56-80a2-266ba687fc83" alt=""><figcaption></figcaption></figure>
