#### Archived

This topic is now archived and is closed to further replies.

# When and Why Recursion

This topic is 6525 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Hello folks, I really would like to know when and why you would use recursion? In what cases does it make sense to use recursion? Is there speed improvements using a recursion algorithm? At what threshold do you begin to loose the effectiveness of using a recursion algorithm? Could this be measured in the number of lines that defines your algorithm? My biggest fear of using recursion is that it could be incredibly hard to debug if there is a problem. I do understand that sometimes, recursion can be of great benefit, but I have seen code that use it almost everywhere they can. Any pointers on using recursion or other techniques that can/do replace using recursion?

##### Share on other sites
Recusion gets you points for style basically. It''s always faster
to find an iterative solution. Howver if your data is inherently
recursive, your not going to do much better. Printing a binary
tree in sorted order is much easyer with recursion.
void CNode::in_order(ostream &os=cout) { if(m_pLeft) m_pLeft->in_order(os); os << m_pData; if(m_pRight) { os << ", "; m_pRight->in_order(os); }}<\code>On the other hand tail recursion doesn''t get you anything but anempty cache.Data* CNode::find(const KeyType &k) { if(k == Key) return m_pData; else if(k < Key) { return (m_pLeft)?m_pLeft->find(k):0; } else { return (m_pRight)?m_pRight->find(k):0; }}// It''s much better to do;Data* CNode::find(const KeyType &k) { CNode *p=this; while(p) { if(k == p->Key) return p->m_pData; else p = (kKey)?p->m_pLeft:p->m_pRight; } return 0;}<\code>The first version is all kinds of ugly, it will fill the stackwith useless data, and I have to guard aginst dereferenceing a NULL pointer. It''s something that comes with experiance, but finding a goodrecusive solution to something is one of the more fun thingsyou can do at a computer while typeing with both hands.-- Grib 
 0 
 Share this post Link to post Share on other sites 
 
 
 Stoffel    250 Stoffel Member 250 Posted July 25, 2000 Recursion is usually the best implementation for problems that have a "divide-and-conquer" solution. Examples are integer power (I think it''s called the peasant''s algorithm in some circles?) and quicksort. Though the previous poster''s correct--every recursive solution can be made iterative--sometimes the iterative solution is more straightforward. 0 Share this post Link to post Share on other sites dj9781    122 dj9781 Member 122 Posted July 26, 2000 Im not positive if it''s true or not but someone once told me a portal engine uses recursion. 0 Share this post Link to post Share on other sites Ionut Costica    122 Ionut Costica Member 122 Posted July 26, 2000 Recursion can be used for some functions: { n+1 if m=0Ackermannn: Ack(m,n)= { Ack(m-1,1) if n=0 { Ack(m-1,Ack(m,n-1)) otherwise[/source]The calculus of (n!)The Fibonacci seriesThe largest common divider of 2 numbersThe Manna-Pnueli function[source] { x-1 if x>=12F(x)= { F(F(x+2)) otherwise The transformation of a number from a base (octal, hexadecimal, decimal, etc.) into another... "Everything is relative." -- Even in the world of computers. 0 Share this post Link to post Share on other sites milo    122 milo Member 122 Posted July 26, 2000 quote:Original post by Stoffel Though the previous poster''s correct--every recursive solution can be made iterative--sometimes the iterative solution is more straightforward. Please, give an example. I''ve never seen an iterative solution of a recursive problem (i.e. the divide and conquer sort) be ''more straightforward''. I have seen recursive solutions to problems that are iteratively obvious and can be done obscurely by recursion (though I can think of any right now). Just wondering. Also, does your definition of ''more straightforward'' take into account the developers understanding of the stack? After all, an iterative solution to a recursive problem essentially comes down to writing your own specialized stack.Mike Robertsaka milomlbobs@telocity.com 0 Share this post Link to post Share on other sites Ionut Costica    122 Ionut Costica Member 122 Posted July 26, 2000 Here''s an example:(it calculates the sum of the digits of one number) //Iterativeint n,s=0;void main(void){ printf("n=");scanf("%d",&n); while(n!=0) { s+=n%10; n/=10; } printf("s=%d",s);}// Recursiveint n;int s(int n){ if(n==0) { return 0; } else { return n%10+s(n/10); }}void main(void){ printf("n=");scanf("%d",&n); printf("s=%d",s(n));} "Everything is relative." -- Even in the world of computers. 0 Share this post Link to post Share on other sites Stoffel    250 Stoffel Member 250 Posted July 26, 2000 Milo:uhhh, I mis-typed.I MEANT to say, "Though the previous poster''s correct--every recursive solution can be made iterative--sometimes the recursive solution is more straightforward."heh, sorry. 0 Share this post Link to post Share on other sites bishop_pass    110 bishop_pass Member 110 Posted July 26, 2000 Recursion solves:maze navigationbranching problemsoctreesfractal generationAI problem solvingbintreesray tracingportal enginesgeneration of plant formscalculation of problems which rely on solutions from sub-problemsroot findinglanguage interpretationlanguage compilationnatural language parsinghierarchical radiosityIf you think there is always an iterative solution that is not too complex that can solve the same problem then you havn''t explored too many recursive problems.Yeah, sure, some of the above can be done with iterative solutions. Go ahead and try it. 0 Share this post Link to post Share on other sites Ionut Costica    122 Ionut Costica Member 122 Posted July 26, 2000 I posted a solution to a maze navigation problem, using recursion on another forum at the AI section (http://www.gamedev.net/community/forums/topic.asp?topic_id=17619&forum_id=9&Topic_Title=I+WOULD+LIKE+SOME+PARTNERS%2C+OR+SOME+HELP+ON+MY+PRO&forum_title=Artificial+Intelligence&M=True&S=True). There, 2 computer characters must find each other in the maze. "Everything is relative." -- Even in the world of computers. 0 Share this post Link to post Share on other sites 
 Prev 1 2 Next Page 1 of 2   
 Go To Topic Listing General and Gameplay Programming Advertisement 
 Announcements GameDev.net AMA: Aaron Marsden, Twitch Influencer Marketing Specialist Advertisement Popular Tags 2D 3D Advice Algorithm Animation C# C++ Console Design DX11 DX12 GameMaker Gameplay General Java Learning Marketing Mobile Music OpenGL Open Source PC SFX Unity Unreal Advertisement Popular Now 48 Would Unique paritcles slow down a physics simulation? By NoAbsoloopsStarted Saturday at 05:19 PM 12 C++ Size of C++ polymorphic objects. By GnollrunnerStarted Friday at 08:05 PM 10 problem with windows API: can't get a correctly sized client area By MarcusAsethStarted Friday at 04:56 PM 10 What ways can I optimize a vector magnitude check? By Scouting NinjaStarted Friday at 07:09 AM 9 Dealing with Fights in the Team By ProfKraufStarted Thursday at 08:34 PM Forum Statistics Total Topics 631374 Total Posts 2999661 GameDev.net GameDev.net Articles GameDev.net Event Coverage GameDev.net Forums GameDev.net Blogs GameDev.net Gallery GameDev.net News GameDev.net Projects GDNet Chat All Activity Search In Everywhere This Forum This Topic More options... Find results that contain... Any of my search term words All of my search term words Find results in... Content titles and body Content titles only Home Forums Programming General and Gameplay Programming When and Why Recursion 
 
 
 × Existing user? Sign In Sign Up Browse Back Articles & Tutorials Back All Categories Audio Business Game Design Industry Programming Visual Arts Columns Back GameDev Unboxed Event Coverage Back All Events Game Developers Conference Power Up Digital Games Conference GameDev.Market Links News Podcasts Back All Podcasts Game Dev Loadout Archive Community Back Beginners Blogs Calendar Chat Forums Back All Forums Audio Business Game Design Programming Visual Arts Community Affiliates Topical Workshops Gallery Groups Projects Back All Projects Games Game Assets Game Mods Developer Tools Store Careers Back Contractors Hobby Projects Game Jobs Back Browse on GameDev.Jobs Post a Job Members Back Chat GDNet+ Membership Guidelines Leaderboard Online Users Awards Search Back All Activity My Activity Streams Back Latest Topics Featured Blogs Search var ipsDebug=false;var CKEDITOR_BASEPATH='//www.gamedev.net/applications/core/interface/ckeditor/ckeditor/';var ipsSettings={cookie_path:"/",cookie_prefix:"ips4_",cookie_ssl:true,upload_imgURL:"",message_imgURL:"",notification_imgURL:"",baseURL:"//www.gamedev.net/",jsURL:"//www.gamedev.net/applications/core/interface/js/js.php",csrfKey:"522060eea547556b762d500d9a45b336",antiCache:"2a361a8a02",disableNotificationSounds:false,useCompiledFiles:true,links_external:true,memberID:0,analyticsProvider:"ga",viewProfiles:true,mapProvider:'google',mapApiKey:"AIzaSyAeT7tk3vnWWmbgVISkLpbhkQvekG19rHM",}; ips.setSetting('date_format',jQuery.parseJSON('"mm\/dd\/yy"'));ips.setSetting('date_first_day',jQuery.parseJSON('0'));ips.setSetting('remote_image_proxy',jQuery.parseJSON('1'));ips.setSetting('ipb_url_filter_option',jQuery.parseJSON('"none"'));ips.setSetting('url_filter_any_action',jQuery.parseJSON('"allow"'));ips.setSetting('bypass_profanity',jQuery.parseJSON('0'));ips.setSetting('emoji_style',jQuery.parseJSON('"native"'));ips.setSetting('emoji_shortcodes',jQuery.parseJSON('"1"'));ips.setSetting('emoji_ascii',jQuery.parseJSON('"1"'));ips.setSetting('emoji_cache',jQuery.parseJSON('"1"'));ips.setSetting('quickSearchDefault',jQuery.parseJSON('"all"'));ips.setSetting('quickSearchMinimum',jQuery.parseJSON('3'));ips.setSetting('quickSearchShowAdv',jQuery.parseJSON('true'));ips.setSetting('quickSearchIn',jQuery.parseJSON('"title"')); { "@context": "http://schema.org", "@type": "DiscussionForumPosting", "url": "https://www.gamedev.net/forums/topic/20376-when-and-why-recursion/", "discussionUrl": "https://www.gamedev.net/forums/topic/20376-when-and-why-recursion/", "name": "When and Why Recursion", "headline": "When and Why Recursion", "text": "Hello folks, \n\nI really would like to know when and why you would use recursion? In what cases does it make sense to use recursion? \n\nIs there speed improvements using a recursion algorithm? At what threshold do you begin to loose the effectiveness of using a recursion algorithm? Could this be measured in the number of lines that defines your algorithm?\n\nMy biggest fear of using recursion is that it could be incredibly hard to debug if there is a problem. \n\nI do understand that sometimes, recursion can be of great benefit, but I have seen code that use it almost everywhere they can. \n\nAny pointers on using recursion or other techniques that can/do replace using recursion?\n\n\n ", "dateCreated": "2000-07-25T07:50:46+0000", "datePublished": "2000-07-25T07:50:46+0000", "pageStart": 1, "pageEnd": 2, "image": "https://secure.gravatar.com/avatar/f896db7e2edea9659c328a3cabe1ba3a?d=https://www.gamedev.net/uploads/monthly_2017_08/A.png.25da68984816292550be2a9de6cb52ff.png", "author": { "@type": "Person", "name": "DNAMAZ", "image": "https://secure.gravatar.com/avatar/f896db7e2edea9659c328a3cabe1ba3a?d=https://www.gamedev.net/uploads/monthly_2017_08/A.png.25da68984816292550be2a9de6cb52ff.png", "url": "https://www.gamedev.net/profile/5791-dnamaz/" }, "interactionStatistic": [ { "@type": "InteractionCounter", "interactionType": "http://schema.org/ViewAction", "userInteractionCount": 730 }, { "@type": "InteractionCounter", "interactionType": "http://schema.org/CommentAction", "userInteractionCount": 19 }, { "@type": "InteractionCounter", "interactionType": "http://schema.org/FollowAction", "userInteractionCount": 14 } ], "comment": [ { "@type": "Comment", "url": "https://www.gamedev.net/forums/topic/20376-when-and-why-recursion/?do=findComment\u0026comment=20376", "author": { "@type": "Person", "name": "AlekM", "image": "https://secure.gravatar.com/avatar/f896db7e2edea9659c328a3cabe1ba3a?d=https://www.gamedev.net/uploads/monthly_2017_08/A.png.25da68984816292550be2a9de6cb52ff.png", "url": "https://www.gamedev.net/profile/5791-dnamaz/" }, "dateCreated": "1970-01-01T00:00:00+0000", "text": "Hello folks, \n\nI really would like to know when and why you would use recursion? In what cases does it make sense to use recursion? \n\nIs there speed improvements using a recursion algorithm? At what threshold do you begin to loose the effectiveness of using a recursion algorithm? Could this be measured in the number of lines that defines your algorithm?\n\nMy biggest fear of using recursion is that it could be incredibly hard to debug if there is a problem. \n\nI do understand that sometimes, recursion can be of great benefit, but I have seen code that use it almost everywhere they can. \n\nAny pointers on using recursion or other techniques that can/do replace using recursion?\n\n\n ", "mainEntityOfPage": "https://www.gamedev.net/forums/topic/20376-when-and-why-recursion/" }, { "@type": "Comment", "url": "https://www.gamedev.net/forums/topic/20376-when-and-why-recursion/?do=findComment\u0026comment=1091907", "author": { "@type": "Person", "name": "Anonymous Poster", "image": "https://www.gamedev.net/uploads/themes/set_resources_7/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png" }, "dateCreated": "1970-01-01T00:00:00+0000", "text": "Recusion gets you points for style basically. It\u0027\u0027s always fasterto find an iterative solution. Howver if your data is inherentlyrecursive, your not going to do much better. Printing a binarytree in sorted order is much easyer with recursion.void CNode::in_order(ostream \u0026amp;os=cout) { if(m_pLeft) m_pLeft-\u0026gt;in_order(os); os if(m_pRight) { os m_pRight-\u0026gt;in_order(os); }}On the other hand tail recursion doesn\u0027\u0027t get you anything but anempty cache.Data* CNode::find(const KeyType \u0026amp;k) { if(k == Key) return m_pData; else if(k return (m_pLeft)?m_pLeft-\u0026gt;find(k):0; } else { return (m_pRight)?m_pRight-\u0026gt;find(k):0; }}// It\u0027\u0027s much better to do;Data* CNode::find(const KeyType \u0026amp;k) { CNode *p=this; while(p) { if(k == p-\u0026gt;Key) return p-\u0026gt;m_pData; else p = (kKey)?p-\u0026gt;m_pLeft:p-\u0026gt;m_pRight; } return 0;}The first version is all kinds of ugly, it will fill the stackwith useless data, and I have to guard aginst dereferenceing a NULL pointer. It\u0027\u0027s something that comes with experiance, but finding a goodrecusive solution to something is one of the more fun thingsyou can do at a computer while typeing with both hands.-- Grib ", "mainEntityOfPage": "https://www.gamedev.net/forums/topic/20376-when-and-why-recursion/" }, { "@type": "Comment", "url": "https://www.gamedev.net/forums/topic/20376-when-and-why-recursion/?do=findComment\u0026comment=1091925", "author": { "@type": "Person", "name": "Stoffel", "image": "https://secure.gravatar.com/avatar/685c0cb538204d7931a3eec316a2afd2?d=https://www.gamedev.net/uploads/monthly_2017_08/S.png.478d66b83536c4e73f5c41ed3298a6a2.png", "url": "https://www.gamedev.net/profile/894-stoffel/" }, "dateCreated": "1970-01-01T00:00:00+0000", "text": "Recursion is usually the best implementation for problems that have a \"divide-and-conquer\" solution. Examples are integer power (I think it\u0027\u0027s called the peasant\u0027\u0027s algorithm in some circles?) and quicksort. Though the previous poster\u0027\u0027s correct--every recursive solution can be made iterative--sometimes the iterative solution is more straightforward.", "mainEntityOfPage": "https://www.gamedev.net/forums/topic/20376-when-and-why-recursion/" }, { "@type": "Comment", "url": "https://www.gamedev.net/forums/topic/20376-when-and-why-recursion/?do=findComment\u0026comment=1092460", "author": { "@type": "Person", "name": "dj9781", "image": "https://secure.gravatar.com/avatar/83a60a660ca1f0ca7dddf414a16a5b99?d=https://www.gamedev.net/uploads/monthly_2017_08/D.png.0c9ddf4ade051ba4c0721612f65e768f.png", "url": "https://www.gamedev.net/profile/3839-dj9781/" }, "dateCreated": "1970-01-01T00:00:00+0000", "text": "Im not positive if it\u0027\u0027s true or not but someone once told me a portal engine uses recursion. ", "mainEntityOfPage": "https://www.gamedev.net/forums/topic/20376-when-and-why-recursion/" }, { "@type": "Comment", "url": "https://www.gamedev.net/forums/topic/20376-when-and-why-recursion/?do=findComment\u0026comment=1092552", "author": { "@type": "Person", "name": "Ionut Costica", "image": "https://secure.gravatar.com/avatar/15a95a6cb1c899b64cff1a2637e45eee?d=https://www.gamedev.net/uploads/monthly_2017_08/I.png.b053713894d4377993795c7a321fc89f.png", "url": "https://www.gamedev.net/profile/7141-ionut-costica/" }, "dateCreated": "1970-01-01T00:00:00+0000", "text": "Recursion can be used for some functions:\n { n+1 if m=0Ackermannn: Ack(m,n)= { Ack(m-1,1) if n=0 { Ack(m-1,Ack(m,n-1)) otherwise[/source]The calculus of (n!)The Fibonacci seriesThe largest common divider of 2 numbersThe Manna-Pnueli function[source] { x-1 if x\u0026gt;=12F(x)= { F(F(x+2)) otherwise\nThe transformation of a number from a base (octal, hexadecimal, decimal, etc.) into another... \"Everything is relative.\" -- Even in the world of computers.", "mainEntityOfPage": "https://www.gamedev.net/forums/topic/20376-when-and-why-recursion/" }, { "@type": "Comment", "url": "https://www.gamedev.net/forums/topic/20376-when-and-why-recursion/?do=findComment\u0026comment=1092619", "author": { "@type": "Person", "name": "milo", "image": "https://secure.gravatar.com/avatar/e33c47081356019b223a75f30f8d43fc?d=https://www.gamedev.net/uploads/monthly_2017_08/M.png.c0b2891c3011651303892f4c83208e68.png", "url": "https://www.gamedev.net/profile/4226-milo/" }, "dateCreated": "1970-01-01T00:00:00+0000", "text": "Please, give an example. I\u0027\u0027ve never seen an iterative solution of a recursive problem (i.e. the divide and conquer sort) be \u0027\u0027more straightforward\u0027\u0027. I have seen recursive solutions to problems that are iteratively obvious and can be done obscurely by recursion (though I can think of any right now). Just wondering. Also, does your definition of \u0027\u0027more straightforward\u0027\u0027 take into account the developers understanding of the stack? After all, an iterative solution to a recursive problem essentially comes down to writing your own specialized stack.Mike Robertsaka milomlbobs@telocity.com\n", "mainEntityOfPage": "https://www.gamedev.net/forums/topic/20376-when-and-why-recursion/" }, { "@type": "Comment", "url": "https://www.gamedev.net/forums/topic/20376-when-and-why-recursion/?do=findComment\u0026comment=1092627", "author": { "@type": "Person", "name": "Ionut Costica", "image": "https://secure.gravatar.com/avatar/15a95a6cb1c899b64cff1a2637e45eee?d=https://www.gamedev.net/uploads/monthly_2017_08/I.png.b053713894d4377993795c7a321fc89f.png", "url": "https://www.gamedev.net/profile/7141-ionut-costica/" }, "dateCreated": "1970-01-01T00:00:00+0000", "text": "Here\u0027\u0027s an example:(it calculates the sum of the digits of one number)\n //Iterativeint n,s=0;void main(void){ printf(\"n=\");scanf(\"%d\",\u0026amp;n);while(n!=0) { s+=n%10; n/=10; } printf(\"s=%d\",s);}// Recursiveint n;int s(int n){if(n==0) {return 0; }else {return n%10+s(n/10); }}void main(void){ printf(\"n=\");scanf(\"%d\",\u0026amp;n); printf(\"s=%d\",s(n));} \"Everything is relative.\" -- Even in the world of computers.", "mainEntityOfPage": "https://www.gamedev.net/forums/topic/20376-when-and-why-recursion/" }, { "@type": "Comment", "url": "https://www.gamedev.net/forums/topic/20376-when-and-why-recursion/?do=findComment\u0026comment=1092629", "author": { "@type": "Person", "name": "Stoffel", "image": "https://secure.gravatar.com/avatar/685c0cb538204d7931a3eec316a2afd2?d=https://www.gamedev.net/uploads/monthly_2017_08/S.png.478d66b83536c4e73f5c41ed3298a6a2.png", "url": "https://www.gamedev.net/profile/894-stoffel/" }, "dateCreated": "1970-01-01T00:00:00+0000", "text": "Milo:uhhh, I mis-typed.I MEANT to say, \"Though the previous poster\u0027\u0027s correct--every recursive solution can be made iterative--sometimes the recursive solution is more straightforward.\"heh, sorry. ", "mainEntityOfPage": "https://www.gamedev.net/forums/topic/20376-when-and-why-recursion/" }, { "@type": "Comment", "url": "https://www.gamedev.net/forums/topic/20376-when-and-why-recursion/?do=findComment\u0026comment=1092647", "author": { "@type": "Person", "name": "bishop_pass", "image": "https://www.gamedev.net/uploads/monthly_2017_10/B.png.43af8788430dffa0527b677d638ede1b.png", "url": "https://www.gamedev.net/profile/5682-bishop_pass/" }, "dateCreated": "1970-01-01T00:00:00+0000", "text": "Recursion solves:maze navigationbranching problemsoctreesfractal generationAI problem solvingbintreesray tracingportal enginesgeneration of plant formscalculation of problems which rely on solutions from sub-problemsroot findinglanguage interpretationlanguage compilationnatural language parsinghierarchical radiosityIf you think there is always an iterative solution that is not too complex that can solve the same problem then you havn\u0027\u0027t explored too many recursive problems.Yeah, sure, some of the above can be done with iterative solutions. Go ahead and try it. ", "mainEntityOfPage": "https://www.gamedev.net/forums/topic/20376-when-and-why-recursion/" }, { "@type": "Comment", "url": "https://www.gamedev.net/forums/topic/20376-when-and-why-recursion/?do=findComment\u0026comment=1092660", "author": { "@type": "Person", "name": "Ionut Costica", "image": "https://secure.gravatar.com/avatar/15a95a6cb1c899b64cff1a2637e45eee?d=https://www.gamedev.net/uploads/monthly_2017_08/I.png.b053713894d4377993795c7a321fc89f.png", "url": "https://www.gamedev.net/profile/7141-ionut-costica/" }, "dateCreated": "1970-01-01T00:00:00+0000", "text": "I posted a solution to a maze navigation problem, using recursion on another forum at the AI section (http://www.gamedev.net/community/forums/topic.asp?topic_id=17619\u0026amp;forum_id=9\u0026amp;Topic_Title=I+WOULD+LIKE+SOME+PARTNERS%2C+OR+SOME+HELP+ON+MY+PRO\u0026amp;forum_title=Artificial+Intelligence\u0026amp;M=True\u0026amp;S=True). There, 2 computer characters must find each other in the maze. \"Everything is relative.\" -- Even in the world of computers.", "mainEntityOfPage": "https://www.gamedev.net/forums/topic/20376-when-and-why-recursion/" } ] } { "@context": "http://www.schema.org", "@type": "WebSite", "name": "GameDev.net", "url": "https://www.gamedev.net/", "potentialAction": { "type": "SearchAction", "query-input": "required name=query", "target": "https://www.gamedev.net/search/?q={query}" }, "inLanguage": [ { "@type": "Language", "name": "English (USA)", "alternateName": "en-US" } ] } { "@context": "http://www.schema.org", "@type": "Organization", "name": "GameDev.net", "url": "https://www.gamedev.net/", "logo": "https://www.gamedev.net/uploads/themes/monthly_2017_04/gamedev-logo-2017-368x76.png.e986e41d566ff6c90485a5304985ed5f.png", "address": { "@type": "PostalAddress", "streetAddress": "", "addressLocality": null, "addressRegion": null, "postalCode": null, "addressCountry": null } } { "@context": "http://schema.org", "@type": "BreadcrumbList", "itemListElement": [ { "@type": "ListItem", "position": 1, "item": { "@id": "https://www.gamedev.net/forums/", "name": "Forums" } }, { "@type": "ListItem", "position": 2, "item": { "@id": "https://www.gamedev.net/forums/forum/4-programming/", "name": "Programming" } }, { "@type": "ListItem", "position": 3, "item": { "@id": "https://www.gamedev.net/forums/forum/9-general-and-gameplay-programming/", "name": "General and Gameplay Programming" } } ] } { "@context": "http://schema.org", "@type": "ContactPage", "url": "https://www.gamedev.net/contact/" } Important Information By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.   I accept Participate in the game development conversation and more when you create an account on GameDev.net! Sign me up!