再帰関数とは自分を呼び出してループする関数の事でしょうか？


再帰関数とは自分を呼び出してループする関数の事でしょうか？

例

[code]

    function myChange() {
        setTimeout(myChange, 5000); 
        let iterative = ()=> {
        iterative = setTimeout(myChange , 5000); 
    }
    
[/code]

＿＿＿＿＿＿

ありがとうございます。

初心者には難しくてよくわかりませんが、  
コールスタックとは下記の情報を見ると、 処理中のデータを一時的にメインメモリーの一部領域に退避させること  
と考えてよいのでしょうか？

＞＞＞  
スタック ［2］ 【stack】  
コンピューターで処理中のデータを一時的に退避させること。また，そのための記憶領域やデータ構造。後に格納したデータを先に取り出す。 → 後入先出法

コールスタック (Call Stack)は、プログラムに実行中にサブルーチンに関する情報を格納するスタックである。  
実行中のサブルーチンとは、呼び出されたが処理を完了していないサブルーチンを意味する。

私のソースは、定義した自分自身をループはしているが、それが起きないので再帰関数と言えないという事でしょうか？  
するとコールスタックが起こるか起こらないかはどう判断できるのでしょうか？




「再帰関数」という語の定義にもよりますが、たとえばCなんかは言語仕様でも言及されています。

> ### 6.5.2.2 Function calls
>
> 11\. Recursive function calls shall be permitted, **both directly and
> indirectly through any chain of other functions**.

([International Organization for Standardization, _ISO 9899:1999 Programming
languages -- C_](https://www.iso.org/standard/29237.html), page.72)

> ### 4.10 Recursion
>
> C functions may be used recursively; that is, a function may call itself
> **either directly or indirectly**.

([Brian W. Kernighan and Dennis M. Ritchie, _The C Programming Language_ ,
Second Edition, Prentice Hall, 1988, ISBN 0-13-110362-8,
0-13-110370-9](http://freecomputerbooks.com/The-C-Programming-Language.html),
page.86)

> ### 14.1.21 Runtime Semantics: Evaluation
>
> Note 2 The BindingIdentifier in a FunctionExpression can be referenced from
> inside the FunctionExpression's FunctionBody to **allow the function to call
> itself recursively**.

([Ecma International, _ECMA-262 ECMAScript® 2016 Language Specification_ ,
Edition 7](https://www.ecma-
international.org/publications/standards/Ecma-262.htm), page.283)

コメントにあるお話に関連して、Cでは **both directly and indirectly**
とされていますね。一方、JavaScript(ECMAScript)では **itself** 以外については言及していません。

しかしながら、いわゆる「相互再帰関数」も再帰関数の一種とみなしてよいのではないでしょうか。いずれも「呼び出したら自身がコールスタックに複数回乗る」ので、通常の関数とは区別できる挙動をすることが根拠です。

参考までに:

> ### [Indirect
> recursion](https://en.wikipedia.org/wiki/Recursion_\(computer_science\)#Indirect_recursion)
>
> Most basic examples of recursion, and most of the examples presented here,
> demonstrate **direct recursion** , in which a function calls **itself**.
> **Indirect recursion** occurs when a function is called **not by itself but
> by another function that it called (either directly or indirectly)**.  
>  ...  
>  Indirect recursion is also called **[mutual
> recursion](https://en.wikipedia.org/wiki/Mutual_recursion)** , which is a
> more symmetric term, though this is simply a difference of emphasis, not a
> different notion.

