Python Forum
Recursive function need help
Thread Rating:
  • 2 Vote(s) - 3.5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Recursive function need help
#2
One week before I was trying write an iterative generator, to flattening deep nested lists. The final result was this: https://stackoverflow.com/questions/2158...1#45213701

But I started with a recursive generator, which was much easier.
from collections import Iterable


def flat(iterable):
    for element in iterable:
        if isinstance(element, Iterable) and not isinstance(element, (str, bytes)):
            yield from flat(element)
        else:
            yield element
It's a more general approach. To convert this generator into an iterative generator was a bit confusing.
You can take this generator and just use min(flat(your_list)).

The yield from syntax makes it much easier to write generators, which are iterating over inalterables and/or generators.

Your example does too much. I think it's better to sort the functionality for maxnum out and do it outside of the function:
def flat_list_func(iterable):
    return_list = []
    # your new flat list
    for element in iterable:
        if isinstance(element, (list,tuple)):
            return_list.extend(flat_list_func(element))
            # here you've forgotten to return your max_val
            # I'm extending the return_list, which elements comes
            # from the recursive function call
        else:
            # if element is not list or tuple, it's appended to the
            # return_list
            return_list.append(element)
    return return_list


nested_list = (5, (1,2), [[1],[9]])
flat_list = flat_list_func(nested_list)
min_val = min(flat_list)
max_val = max(flat_list)

import statistics
mean_val = statistics.mean(flat_list)
median_val = statistics.median(flat_list)
# and much more
In general it's often easier writing recursive functions as writing the iterative counter part. In most languages we have the problem, that every function gets an own stack. If you have 32.000 functions running because of recursion, it's consuming memory. In Python the recursion depth is limited to 1000. You even have this problem in C.
Almost dead, but too lazy to die: https://sourceserver.info
All humans together. We don't need politicians!
Reply


Messages In This Thread
Recursive function need help - by Neural_oD - Aug-01-2017, 07:42 AM
RE: Recursive function need help - by DeaD_EyE - Aug-01-2017, 08:42 AM
RE: Recursive function need help - by Neural_oD - Aug-01-2017, 09:02 AM
RE: Recursive function need help - by DeaD_EyE - Aug-01-2017, 09:11 AM
RE: Recursive function need help - by Neural_oD - Aug-01-2017, 09:23 AM

Possibly Related Threads…
Thread Author Replies Views Last Post
  "Plotting and Computation of Logistic Function by Using Taylor Series with Recursive canatilaa 1 1,916 May-13-2020, 04:01 PM
Last Post: jefsummers
  Recursive Function - Compare 2 lists, return the elements that don't exist in both KellyBaptist 1 5,371 Dec-23-2018, 10:10 AM
Last Post: Gribouillis
  Storing Minimum List of values from a recursive function sigsegv22 1 2,638 Sep-10-2018, 01:25 PM
Last Post: ichabod801
  Recursive function with a parameter MOH 0 2,149 Apr-30-2018, 09:39 PM
Last Post: MOH
  Recursive Function Fanki 2 3,110 Dec-06-2017, 11:40 AM
Last Post: gruntfutuk
  Recursive function janek30 1 2,981 May-16-2017, 04:58 PM
Last Post: micseydel

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020