The N Queens Problem using Backtracking/Recursion - Explained

Поделиться
HTML-код
  • Опубликовано: 12 дек 2018
  • Code - backtobackswe.com/platform/co...
    Free 5-Day Mini-Course: backtobackswe.com
    Try Our Full Platform: backtobackswe.com/pricing
    📹 Intuitive Video Explanations
    🏃 Run Code As You Learn
    💾 Save Progress
    ❓New Unseen Questions
    🔎 Get All Solutions
    Question: Write a program which returns all distinct nonattacking placements of n queens on an nxn chessboard, where n is an input to the program.
    A nonattacking placement of queens is one in which no two queens are in the same row, column, or diagonal.
    We will use backtracking to solve this problem.
    This can be one of the most confusing topics that you have to learn, expecially if you have shaky foundations in thinking recursively and calculating harder complexities.
    Other Well Know Backtracking Problems:
    -) Generate The Powerset of An Array (Subsets)
    -) Generate All Permutations of A String
    Backtracking/Recursion is about following a path to a base case...our target...our answer. If a certain path ends up not meeting our constraints we will backtrack to an earlier state and try something else from there.
    The 3 Keys To Backtracking Problems:
    Our Choice
    -) What choice are we making at each call of the function
    -) RECURSION REPRESENTS A DECISION.
    -) RECURSION REPRESENTS A CHOICE & its associated state
    -) Each function call represents a state. From that state decisions can be made.
    Our Constraints
    -) What tells us to stop following a certain path that we are searching on?
    -) Have we exhausted all possibilities?
    Our Goal
    -) What is our target?
    -) What are we trying to find?
    -) These will craft our base cases.
    Example: You lost your keys. Where do you go? The most recent place you were. Then the most recent place from there. And so on. Then you go to somewhere else...eventually you find your keys or give up the search.
    So for this problem:
    Our Choice - Where to place a queen
    Our Constraints - The placement must non-attacking
    Our Goal - Place n-queens on the chess board
    Time and Space Complexities:
    Complexity for this problem is tricky.
    The time complexity is lower bounded by the number of non-attacking placements because we will be making at least the amount of function calls that it takes to find those placements (meaning we don't even include work done in each call).
    No exact form is known for this lower bound as a function of n, but it is conjectured to tend towards n! / (c ^ n) (where c ≈ 2.54) which is super-exponential.
    Super exponential growth forms a "J-curve" that grows much faster than exponential functions.
    RECURSION REPRESENTS A DECISION.
    RECURSION REPRESENTS A DECISION.
    RECURSION REPRESENTS A DECISION.
    Whether this is a tree or a linked list, etc. When thinking recursively, our function sets forth rules that allows the function to make decisions based on state passed into it
    All backtracking is about is that we can return to previous decision points and explore another path that hasn't been taken yet to see if it yields an answer.
    ++++++++++++++++++++++++++++++++++++++++++++++++++
    HackerRank: / @hackerrankofficial
    Tuschar Roy: / tusharroy2525
    GeeksForGeeks: / @geeksforgeeksvideos
    Jarvis Johnson: / vsympathyv
    Success In Tech: / @successintech
    ++++++++++++++++++++++++++++++++++++++++++++++++++
    This question is question 16.2 in Elements of Programming Interviews (EPI).
  • НаукаНаука

Комментарии • 324

  • @BackToBackSWE
    @BackToBackSWE  5 лет назад +41

    Table of Contents: (and more info)
    Video Setup 0:00 - 0:33
    Introducing The N Queens Problem 0:33 - 1:05
    What Is Backtracking? 1:05 - 2:15
    Further Describing The Problem 2:15 - 3:21
    The 3 Keys To Backtracking Problems 3:21 - 5:31
    The Code 5:31 - 13:11
    Wrap Up 13:11 - 14:09
    The N Queens Problem Made Simple. Forgot to explain time complexities, that is in the description. Also, I wish I could've drawn a full diagram of the backtracking but ran out of room on the board. I may make a separate video for that since VISUALS are very key for understanding how these backtracking algorithms work.

  • @alihaghighipour7371
    @alihaghighipour7371 4 года назад +150

    you're by far the most enthusiastic person that i've ever seen in this field dude . keep it up !

    • @BackToBackSWE
      @BackToBackSWE  4 года назад +16

      I was mad lol, because online explanations sucked

    • @qwarlockz8017
      @qwarlockz8017 3 года назад

      @@BackToBackSWE Also, your code for this is the cleanest and clearest that I have seen. I have searched through github and no one has better code for this excersize.

  • @naydernn4725
    @naydernn4725 2 года назад +12

    I can tell this explanation is coming from someone who struggled a long time with the concept, because your explanation is so thorough yet accommodating that it is hard not to kind of get it as I follow along.. Thank you so much!

    • @BackToBackSWE
      @BackToBackSWE  2 года назад +1

      Thank you, glad you liked it 😀
      Do check out backtobackswe.com/platform/content
      and please recommend us to your family and friends 😀

  • @jiadar
    @jiadar 3 года назад +8

    I've never seen someone so excited about algorithms. Great content. Well done!

  • @YashSharma-uw8dn
    @YashSharma-uw8dn 4 года назад +37

    I really like the informalness that you bring while making videos on dense topics, trust me that really helps the viewers 😁

  • @BarnezGFX
    @BarnezGFX 5 лет назад +108

    This is a brilliant example, and it's evident you care about what you are teaching - which is greatly appreciated and reflected in the quality of the video. Thanks a lot, it helped me get a little bit closer to understanding.

    • @BackToBackSWE
      @BackToBackSWE  5 лет назад +13

      Great. That means a lot. My goal is to make this the premier channel (#1 on RUclips) for programming interview prep. Teaching is hard and I'm slowly getting better at it.
      If you are still not 100% give it a few months and come back. Concepts that are new like this take time to sink in, but once they are internalized they stay for a long time in understanding.

  • @ericlugo-dev
    @ericlugo-dev 3 года назад +2

    Absolutely love the way this was explained. I've been ramming my head at the wall that is understanding recursion for a bit without much progress, yet this explanation completely changed the way I treat it!!!

  • @finncummins6230
    @finncummins6230 5 лет назад +6

    Hey man, I love the great quality of these videos and the depth to which you explain each topic. I am currently studying for a competitive programming competition and I'm finding your videos to be a great study aid. Keep up the good work!

  • @NithinMWarrier
    @NithinMWarrier 2 года назад +1

    I really love the way you explain, your commitment to understand is amazing, a big thumbs up man!!

  • @danielg012
    @danielg012 5 лет назад +7

    These videos have been super helpful for me during my interview prep. Thank you so much!

    • @BackToBackSWE
      @BackToBackSWE  5 лет назад +7

      It is nothing. If you ever have any questions just comment on a video and I can answer them (I check these daily).
      I am literally here for you. Although we may not know each other I know exactly what you are going through.
      This is why the channel exists and why I do this.

  • @takharamazanpolat7610
    @takharamazanpolat7610 4 года назад +3

    I'm watching this channel's video first time but I can say that this man has a passion for what he does, it can be seen in the first couple of minutes.

  • @eggsaladstuckcrafts4653
    @eggsaladstuckcrafts4653 4 года назад +2

    Thank you so much for making this video. I was so confused about where to even start with my backtracking project for class but this helped me so much!

  • @vinithapalani3385
    @vinithapalani3385 5 лет назад +2

    Have watched half a dozen of videos on this ...but only after watching this can I confidently say that I "get it" ..Thanks you so much, you are awesome!!

  • @jayliang5737
    @jayliang5737 4 года назад +2

    You get the clearest explanation for backtracking I can find on youtube!

  • @xinyuyou7512
    @xinyuyou7512 5 лет назад +2

    I really feel your enthusiastic when you're making this video. This helps me continue Learning the video. Thank you so much.

  • @ameerkaras4580
    @ameerkaras4580 3 года назад +1

    These have got to be the only genuinely entertaining coding vids on the internet, love it

  • @manasasusirla6451
    @manasasusirla6451 3 года назад +2

    I bet there's no one who can explain backtracking problem better than you did. Your video helped me a lot. Thanks!

  • @karankanchetty105
    @karankanchetty105 4 года назад +3

    Wow. You just boiled a hard problem down to 3 simple steps that we can always rely on. Thanks for the video and an awesome explanation.

  • @rajrajeshwarsinghrathore
    @rajrajeshwarsinghrathore 2 года назад

    Thanks a lot. This was my first LeetCode HARD problem. Gave a much-needed confidence.

  • @gmstabloid
    @gmstabloid 5 лет назад +2

    You should be proud man! Awesome explanation and passion for the code! Thanks!

  • @vraih4847
    @vraih4847 4 года назад +1

    You simplified such a difficult problem to a clean and simplified solution....Amazing!!!
    And the github code is commented so well, I didn't find any difficulty understanding it.
    Keep up this good work bro...appreciate it!!!

  • @lilaiyang5745
    @lilaiyang5745 2 года назад +1

    Please keep doing more problems, only your video makes me understand N-Queens Problems. Appreciate it!

    • @BackToBackSWE
      @BackToBackSWE  2 года назад

      Amaze! Stay tuned for our upcoming interview prep module with new mentors!

  • @IlyaBoytsov-dt8lt
    @IlyaBoytsov-dt8lt 4 года назад +2

    Hi, Ben. Starting watching your videos during new year holidays was a great idea for me. Before that I was watching different algorithm tutorials on youtube, but it can`t be compared with your effort and explanations. Hope to see more from you, my special wish to your channel is to make more videos of new and latest problems that come from different companies interviews.
    It is important for learning because some problems are "classic" and despite of the fact that intuition behind them is still of crucial importance, that would be nice to have some "fresh" problems! Or maybe some variations of older problems...
    One more time thank you, i am going to join your coding interview class and keep learning.
    Best wishes from Russia,
    Ilya

  • @Ayushkumar-xj9vl
    @Ayushkumar-xj9vl 4 года назад +7

    Thanks for this briliant insight to recursion, you explain like a big bro.😃

  • @svdfxd
    @svdfxd 5 лет назад +1

    As usual very nice explanation. And a big thanks to your buddy who films all videos religiously.

    • @BackToBackSWE
      @BackToBackSWE  5 лет назад +1

      hahaha, it is a religion at this point

  • @sanjivmadhavan5705
    @sanjivmadhavan5705 4 года назад +2

    AWW THIS VIDEO WAS POSTED ON MY BIRTHDAY. THANKS FOR THE GIFT MY MAN

  • @prashant211087
    @prashant211087 4 года назад +64

    When you reach the end of this playlist... Backtrack :)

  • @satyadeeproat2012
    @satyadeeproat2012 4 года назад +5

    Really good explanation to divide backtracking problems in goals, choice and constraint. Backtracking problems get really easy thinking in this way

  • @marisawong644
    @marisawong644 9 месяцев назад

    i love this man - he explains everything so well!

  • @hackerandpainter
    @hackerandpainter 3 года назад

    you are a skinny legend dude. love your videos pls keep it up!! would love to see a vid on strongly connected components/ tarjan algorithm from you

  • @bokams3385
    @bokams3385 3 года назад +2

    It’s superb analysis ,I have gone through a lot of blogs sites but I couldn’t understand finally I understand thanks a lot ,keep rocking

  • @ismailahmad9597
    @ismailahmad9597 Год назад

    The concept was tough enough that I had to rewind a few times, pause, and think. But the explanation, method of presentation, and such was amazing. Thanks a ton!

  • @0x1h0b
    @0x1h0b 5 лет назад +2

    back tracking is a real pain. but you made it look so easy . thank you man !... waiting for more interview problems like this........:-)

  • @user-ku2kq9hb5u
    @user-ku2kq9hb5u 2 года назад

    this is supper clear, thank you for making these videos

  • @AdtecBarema
    @AdtecBarema 6 месяцев назад

    This is Just Superb, thank you so much Biny for all effort & kindness, in demistyfying this involved problem.

  • @sarthakbhatia7888
    @sarthakbhatia7888 4 года назад +3

    Thanks mann....Your explaination is really one of the best out there!!

  • @RK-nw1nq
    @RK-nw1nq 4 года назад +2

    Such a great explanation and your energy, it was amazing which really helps in understanding the concept better. GREAT WORK!!

  • @jjlovekdw
    @jjlovekdw 4 года назад +1

    Thank you so much for explaining this problem, vert easy to understand and very useful for my preparation of my whiteboard interview.
    Hopeful it will goes will next week.

  • @shriyadas925
    @shriyadas925 5 лет назад +1

    Awesome explanation. Best video on this topic! Loved it!

  • @eltonmurillo1909
    @eltonmurillo1909 3 года назад

    thanks for the video. thank you for drilling the principles! this helps tremendously. recursion can get pretty difficult. the longer you think about it the more confusing it gets lol...

  • @jacksonsouza5232
    @jacksonsouza5232 5 лет назад +1

    Very clear explanation of backtracking at the beginning, thanks!

  • @nico-bf8ql
    @nico-bf8ql Год назад

    thank u so much. i love how causal and inviting you are

    • @BackToBackSWE
      @BackToBackSWE  Год назад

      Glad it was helpful! 😄 Also check out our FREE DSA Interview Prep Mini-Course - backtobackswe.com/ 🎉

  • @soymaxxing
    @soymaxxing 4 года назад +1

    Excellent video as always, planning to join your class soon. Might join next month , a little busy this month unfortunately.

  • @TanujMishra077
    @TanujMishra077 5 лет назад +2

    Great explanation. You guys are awesome. Keep up the good work. Subscribed.

  • @F.R.A.N.K.I.E
    @F.R.A.N.K.I.E 3 года назад

    You're nothing less than a hero, thank you!

  • @ipals1234
    @ipals1234 4 года назад +2

    The way you explain details is very good. A small suggestion for code: you can keep both add and remove colPlacements inside if loop, it would avoid adding and removing current col to colplacements list if the valid Placement is false.

  • @teki9845
    @teki9845 2 года назад

    Amazing video man , thank you so much !!!!!!!!

  • @shikharsaxena4432
    @shikharsaxena4432 4 года назад

    Thanks a lot for such an amazing explanation, I have my coding round for Twitter this week, I hope I clear it. 🤞

  • @jayram.deshpande
    @jayram.deshpande 3 года назад

    amazingly explained ! Bravo !

  • @avrillovugne
    @avrillovugne 5 лет назад +1

    Thank you Ben, great explanation!

  • @nishantjain2128
    @nishantjain2128 4 года назад +1

    Man these 3 points are really great... i am able to solve now various backtracking problems on my own

  • @pablogalindo2089
    @pablogalindo2089 3 года назад +1

    I love the way you teach!! very helpful

  • @rahulsaxena9103
    @rahulsaxena9103 4 года назад +1

    You are awesome!!. Such a lucid explanation!

  • @Paradise-kv7fn
    @Paradise-kv7fn 5 лет назад +2

    I liked the tutorial series...I saw your subset and permutation videos and I somehow managed to come up with the solution to this problem all by myself...so thanks for the wonderful explanation of this topic...however, I couldn't come up with all the possible placements for the queen

    • @BackToBackSWE
      @BackToBackSWE  5 лет назад

      Nice. And what do you mean by " I couldn't come up with all the possible placements for the queen". Like you coded it and it has a bug or you don't understand or...yeah...confused.

    • @Paradise-kv7fn
      @Paradise-kv7fn 5 лет назад +1

      @@BackToBackSWE currently my solution gives me only 1 possible arrangements...but i was unable to modify it so that it returns me the total numbers of possible valid arrangements for a given nxn board...can you help me on that?
      I was thinking of calling our helper function for each column in the first row i.e for each cell in the first row....that will ensure that we cover all possible cases and not just return trie when we find our first valid arrangement....but before calling helper function with a new column value in the first row, we will check if it has already not been peocessed as a valid position by one of our previous calls to the helper function... but i am.not sure if it would work

    • @BackToBackSWE
      @BackToBackSWE  5 лет назад

      @@Paradise-kv7fn check other solutions on Leetcode, I'd love to help but I'm busy-ish today

  • @ruchikasalwan1285
    @ruchikasalwan1285 4 года назад +1

    Good one! Explained really well!

  • @muralivenuthyagarajan5767
    @muralivenuthyagarajan5767 5 лет назад +1

    Awesome explanation. Easy to understand.

  • @adipratapsinghaps
    @adipratapsinghaps 2 года назад

    if -> our goal
    else -> loop (pick a choice, check constraints [if valid, go deeper], undo choice)
    Sweet!!!

  • @siddhantsharma6747
    @siddhantsharma6747 4 года назад +7

    Dude I have no idea how you don't have 1M subscribers by now.

    • @BackToBackSWE
      @BackToBackSWE  4 года назад

      The channel is young and niche. We do not have content that scales yet.

    • @hezekiahbranch5461
      @hezekiahbranch5461 4 года назад

      Agreed!!

    • @vigneshkrishnan3192
      @vigneshkrishnan3192 4 года назад

      Get a guy who does good video editing. your channel will surely sky rocket.

  • @vivek4490
    @vivek4490 3 года назад

    awesome explanation!

  • @heyyyyyworld
    @heyyyyyworld 2 года назад +1

    Thank you!!!!

  • @Ty1er
    @Ty1er 3 года назад

    Awesome work
    Helped me A LOT
    THANKS 🤍

  • @adhoc3018
    @adhoc3018 3 года назад

    Brilliant explanation.

  • @farhanuddinkazi3051
    @farhanuddinkazi3051 5 лет назад +1

    Thanks, it was really helpful.

  • @srikantsharma6430
    @srikantsharma6430 4 года назад +1

    Appreciate your hard work.

  • @josephwong2832
    @josephwong2832 4 года назад +1

    Love your teaching style bro

  • @krishnapathi572
    @krishnapathi572 3 года назад +1

    That is a damn good explanation and awesome energy bro :)

  • @Palmoghe
    @Palmoghe 5 лет назад +2

    Appreciate the passion and efforts. Kudos to you two! ++Subscribers :)

  • @joshwahnon854
    @joshwahnon854 2 года назад +1

    Very clear, very well explained. Can you do a video on the use of DPLL algorithm and what types of problem to use it on?

    • @BackToBackSWE
      @BackToBackSWE  2 года назад

      You can subscribe to our DSA course with a flat 30% off for some amazing content b2bswe.co/3HhvIlV

  • @bhushanshinde4227
    @bhushanshinde4227 2 года назад

    Good job boy!

  • @ziedbrahmi4812
    @ziedbrahmi4812 2 года назад

    THANK YOU

  • @nocode659
    @nocode659 4 года назад +1

    First video of you i Watched and subscribed! DOT

  • @ramansb1008
    @ramansb1008 2 года назад

    ayyy ur a boss, I was struggling on this shit man !

    • @BackToBackSWE
      @BackToBackSWE  2 года назад

      Thank You, Glad you liked it.
      Do check out backtobackswe.com/platform/content
      and please recommend us to your family and friends :)

  • @tlj77
    @tlj77 4 года назад +1

    Really nice, thanks man

  • @jomosis9234
    @jomosis9234 4 года назад +1

    I love your explanation for backtracking problems. Now I've got a good understanding of the frame of doing such kind of problem, thank you so much!!! But one more thing I want to make sure is that whenever a backtracking function call is exhausted,it returns to its higher layer stack, is undos the first thing that it will execute?
    For example:
    backtrack(...)
    undos
    let's say backtrack(1) return to backtrack(2) ,it will undo what it did to " 1 ",and then keep backtracking. Do I get it?
    For more complicated backtracking problems:
    backtrack 1
    some orders
    backtrack 2
    these 2 backtracking calls are different. If backtrack 1 is exhausted. Does the process work like this: backtrack 1 returns to the previous stack, then execute these orders, and then do the backtrack 2 until it is also exhausted , and then return to the next previous stack of backtrack 1. If some orders are undos , will this process change?

    • @BackToBackSWE
      @BackToBackSWE  4 года назад

      can you consolidate your question, it is hard to parse this all

  • @mayankdandwani9951
    @mayankdandwani9951 4 года назад +1

    Bro your explanations are damn good !!!!!!!!!!!

  • @SlowMister112
    @SlowMister112 3 года назад +1

    the nqueens can also be solved by using a knight layout: queens can attack like every other unit except the knight, so if one finds out a combination exclusively for knights it solves the nqueens too

  • @siddhantrai7529
    @siddhantrai7529 5 лет назад +1

    Brilliant explanation

  • @NaveenKumar-os8dv
    @NaveenKumar-os8dv 2 года назад

    10:38 You don't know how much I needed to understand that part. Thank you!! I was so confused. I just didn't know "HOW TO BACTRACK" The most confusing part for me was : :how the heck making it equal to null(or zero - meaning removing it(our choice)) makes our function go back?? Yeah I can find one way or n way to place queens, but how to find all of them?? and that's where your video help me, I missed the point that the loop is always increasing, if my choice is removed next time it will choose for col+1 and (not the 'col' instead).

  • @madiyar8079
    @madiyar8079 4 года назад +1

    amazing, thank you

  • @Milchmann2
    @Milchmann2 5 лет назад +1

    Beautiful!

  • @a_k__
    @a_k__ 4 года назад +1

    Amazing job man. Well done.

    • @BackToBackSWE
      @BackToBackSWE  4 года назад +1

      ye

    • @a_k__
      @a_k__ 4 года назад +1

      @@BackToBackSWE It would have been great if you could make a video about the behavioral/phone screen part of the interview for SWE as well.

    • @BackToBackSWE
      @BackToBackSWE  4 года назад +1

      @@a_k__ ok

  • @rozzero9664
    @rozzero9664 4 года назад +1

    hats off to you .. you are the first non Indian tutorial channel

  • @mathavraj9378
    @mathavraj9378 3 года назад +2

    When he begins the video by saying he took three months to grasp the concept.. I felt that

  • @lokeshs9449
    @lokeshs9449 3 года назад +1

    Your'e BackTracking Hero Man

    • @BackToBackSWE
      @BackToBackSWE  3 года назад

      thanks lol, always wanted to be that

  • @anjurawat9274
    @anjurawat9274 4 года назад +1

    very helpful and as I always say.. I love ur way of teaching sir

    • @BackToBackSWE
      @BackToBackSWE  4 года назад +1

      hey

    • @anjurawat9274
      @anjurawat9274 4 года назад

      @@BackToBackSWE helo sir i sent u a msg request on ur fb page please check out

  • @sandile13809
    @sandile13809 2 года назад

    ur epic bro thank you sm

  • @ramansb1008
    @ramansb1008 2 года назад

    naah i had 2 come back again and comment after i coded my own solution u r a legend

    • @BackToBackSWE
      @BackToBackSWE  2 года назад

      Thank You, Glad you liked it.
      Do check out backtobackswe.com/platform/content
      and please recommend us to your family and friends :)

  • @holyshit922
    @holyshit922 4 года назад +1

    Solution for another chess problem known as Knight's tour can be found in
    Wirth's Algorithms + data structures = programs
    It also uses backtracking

  • @ogbonnakingsley9908
    @ogbonnakingsley9908 3 года назад +2

    Great explanation. I have a newbie question though. Why do we need to backtrack on every iteration of the for-loop. What if the last choice made was correct. What purpose does undoing the choice serve? You made a statement about the program continuing from the last point of the stack. How does undoing our choice serve that purpose?

    • @IkethRacing
      @IkethRacing 2 года назад

      because the alternative is keeping a complete board representation for each move which gobbles up your ram

  • @paulancajima
    @paulancajima 2 года назад

    Thanks

  • @tandonneeraj
    @tandonneeraj 4 года назад +1

    Very clear explanation.

    • @BackToBackSWE
      @BackToBackSWE  4 года назад

      thanks

    • @tandonneeraj
      @tandonneeraj 4 года назад

      ​@@BackToBackSWE Is the code shown working. What if the row results in no solution. For if row[0] = 0 , row[1] = 2 then row[2] has no solution. It should backtrack with remove but for some reason I do not reach the solution.

  • @suchychleb9573
    @suchychleb9573 3 года назад +1

    great job

  • @drosegetshoes
    @drosegetshoes 5 лет назад +1

    Thank you.

  • @kevinsu2219
    @kevinsu2219 5 лет назад +3

    nice explanation

  • @jaewonshin3761
    @jaewonshin3761 4 года назад +1

    AWESOME!!!!!!

  • @sumandas829
    @sumandas829 3 года назад +1

    Best video on Internet

  • @geetusharma3923
    @geetusharma3923 4 года назад +1

    Awesome video 👌.. thanks a lot .🔥. please upload more videos...

  • @UECDishaKhattri
    @UECDishaKhattri 4 года назад +1

    you explain concepts very well. Please code in c++.

    • @BackToBackSWE
      @BackToBackSWE  4 года назад

      Thanks and we have C++ solutions at backtobackswe.com

  • @airysm
    @airysm 5 лет назад +2

    I think my problem with recursive problems is how to format my code if that makes sense,
    like how many helper functions to make and what parameters are each going to take. Any tips for that?
    Btw I forgot how I found your channel, but I love the vids!

    • @BackToBackSWE
      @BackToBackSWE  5 лет назад +6

      Yes, this is the hardest part. Thinking recursively took me SEVERAL months to understand and become proficient at. Some just get it, some don't. I didn't.
      1.) The more practice you do and the more problems you see, the better you will get at defining base and recursive cases. This is sadly true, a lot of work.
      2.) Before even making a driver function, I scaffold out the signature of the recursive helper function. The biggest things that influence this are #1 and #3 of the "keys" I mentioned, your Choices & Goal. In this problem you see we pass in a "colPlacements" array to remember our CHOICES as well as the row # that we are working on and a "result" array to remember our answers, etc. It is not always this straightforward but the key is to ask.
      "What subproblems am I solving and what do I need in each to make things work?" For this problem a subproblem is solving a row. When n rows are solved we are done. So that's definitely a param and will be used in the base case since it is our GOAL.
      Otherwise it is just practice, trial and error, and eventually proficiency increases greatly.

  • @anmolmishra1914
    @anmolmishra1914 5 лет назад +5

    I do have weak roots in recursion, I am an undergrad, How did you improve your recursion? (What to do while practicing?)
    i don't use FB else I would have asked the same on the group, I don't see any other to ask a question. Sorry for trouble like this.

    • @BackToBackSWE
      @BackToBackSWE  5 лет назад +8

      Do a ton of problems until it is seared into your soul. And no, this is the best place to ask questions.

    • @jonathandaniel7321
      @jonathandaniel7321 4 года назад +2

      what did the trick for me is trusting the recursive calls, put the base case above it and it will always work, just trust it