fibonacci Fibonacci Number Problem Formulation fibonacci_1FibonacciNumberProblem Recursive Fibonacci Parallelism fibonacci_1RecursiveFibonacciParallelism We study the classic problem, Fibonacci Number, to demonstrate the use of recursive task parallelism. Problem Formulation In mathematics, the Fibonacci numbers, commonly denoted F(n), form a sequence such that each number is the sum of the two preceding ones, starting from 0 and 1. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... A common solution for computing fibonacci numbers is recursion. intfib(intn){ if(n<2)returnn; returnfib(n-1)+fib(n-2); } Recursive Fibonacci Parallelism We use tf::Subflow to recursively compute fibonacci numbers in parallel. #include<taskflow/taskflow.hpp> intspawn(intn,tf::Subflow&sbf){ if(n<2)returnn; intres1,res2; sbf.emplace([&res1,n](tf::Subflow&sbf){res1=spawn(n-1,sbf);}) .name(std::to_string(n-1)); sbf.emplace([&res2,n](tf::Subflow&sbf){res2=spawn(n-2,sbf);}) .name(std::to_string(n-2)); sbf.join(); returnres1+res2; } intmain(intargc,char*argv[]){ intN=5; intres; tf::Executorexecutor; tf::Taskflowtaskflow("fibonacci"); taskflow.emplace([&res,N](tf::Subflow&sbf){res=spawn(N,sbf);}) .name(std::to_string(N)); executor.run(taskflow).wait(); taskflow.dump(std::cout); std::cout<<"Fib["<<N<<"]:"<<res<<std::endl; return0; } The spawned taskflow graph for computing up to the fifth fibonacci number is shown below: Even if recursive dynamic tasking or subflows are possible, the recursion depth may not be too deep or it can cause stack overflow.