Sponsored Content
Full Discussion: Recursion
Top Forums Programming Recursion Post 302263676 by otheus on Tuesday 2nd of December 2008 08:09:53 AM
Old 12-02-2008
You've been around long enough not to post homework questions, so I'll answer: use setjmp() and longjmp(). Basically, the first call saves the current stack configuration (stack pointer, parent caller address, etc). The second call restores that stack configuration. So you might have some code like this:
Code:
#include <setjmp.h>
int found = 0;
jmp_buf origin; 
main() {
  setjmp(&origin);
  if (found == 0) 
     recursive_call();
}

recursive_call() {

   /* HERE: set found to 1 at some point */
   /* then... */
   if (found == 0) 
      recursive_call();
   else 
      longjmp( &origin );
}

 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

recursion

I'm using the UNIX csh and i wish to use recursion to nav my way up (or down as it is) a given folder. My little test script is called "r" and takes a folder as argv (or $1) #!/bin/tcsh -f set allFiles = `ls -A $argv` cd $argv while ($#allFiles) if (-d... (1 Reply)
Discussion started by: gsjf
1 Replies

2. Shell Programming and Scripting

recursion too deep

I am running a korn shell script which has a recursive function. The script ran for 117 iterations and ended up with the following error "recursion too deep". what should be done to avert this? Thanks in advance Swamy p.s. I am on UNIX MPRAS V4 (3 Replies)
Discussion started by: swamy455
3 Replies

3. Shell Programming and Scripting

Help Help Help in recursion

Hello every body. I am trying to find the factorial using the following code. But it is giving the syntax error. I tried very much but in vain. Thanks in advance for helping me factorial() { if then y=`expr $1 - 1` x=$(( $1 \* factorial $y ))... (6 Replies)
Discussion started by: murtaza
6 Replies

4. Shell Programming and Scripting

recursion script problem

Hi Guys,, I tried to create a recursive function in unix. The following is the code. #/bin/sh function(){ n=$1; if ; then out=1; echo "inside if for 0"; else out = `$n * function "$n-1"`; echo "inside if for $n-1; fi (3 Replies)
Discussion started by: mac4rfree
3 Replies

5. Programming

C Recursion (explain)

Hi, Question: how come the output is like that? Can explain to me abit. I am learning C. Thanks! #include <stdio.h> #include <string.h> void printit(char line_of_char, int index); int main() { char line_of_char; int index = -1; strcpy(line_of_char, "This is a string."); ... (5 Replies)
Discussion started by: seede
5 Replies

6. Shell Programming and Scripting

script recursion

Can someone please explain me why the following script calls it self recursively: #!/bin/bash echo Called $0 while this not: #!/bin/bash echo Called $($0) Thanks (6 Replies)
Discussion started by: superpointer
6 Replies

7. UNIX for Advanced & Expert Users

Recursion list for rm -R in find

In the following command: find / -ctime +3 -exec rm -R {}\; how is the recursion list built for the actual rm ? F'rinstance; I had a case where a user typed this as root using '/' instead of '.' so everything in the root level was going to be traversed. They hit <ctrl>C before too much was... (5 Replies)
Discussion started by: port43
5 Replies

8. Shell Programming and Scripting

Bash variable recursion

Not sure how to ask this question. I want concatenate strings and variable recursively into new variable. For example: infile01=/dir/subfolder/file01.txt infile02=/dir/subfolder/file02.txt infile03=/dir/subfolder/file03.txt for i in {01..03} do u=${"infile"$i} echo $u doneI got error... (7 Replies)
Discussion started by: yifangt
7 Replies

9. Solaris

BIND 9, disable recursion

Hi, I am trying to disable the recursion on DNS server (Solaris 10). I have added the lines in the named.conf as below: allow-query-cache { none; }; recursion no; Then restarted the solaris DNS services svcadm refresh svc:/network/dns/server:default Still I am able to... (0 Replies)
Discussion started by: snchaudhari2
0 Replies

10. UNIX for Beginners Questions & Answers

Copy directory withOUT recursion

Hi, I cannot find a way to copy a directory to another location with all attributes (mode, ownership, timestamps) but withOUT recursion (after so many years of working with Linux). Say I want to create /home/jail/tmp exactly like /tmp but with nothing in it. Here is what I tried: ... (7 Replies)
Discussion started by: chebarbudo
7 Replies
setjmp(3)						     Library Functions Manual							 setjmp(3)

NAME
setjmp, _setjmp, longjmp, _longjmp - Saves and restores the current execution context LIBRARY
Standard C Library (libc.a, libc.so) System V Library (libsys5.a, libsys5.so) SYNOPSIS
#include <setjmp.h> int setjmp( jmp_buf environment); void longjmp( jmp_buf environment, int value); int _setjmp ( jmp_buf environment); void _longjmp( jmp_buf environment, int value); STANDARDS
Interfaces documented on this reference page conform to industry standards as follows: setjmp(), longjmp(): XSH4.2 _setjmp(), _longjmp(): XSH4.2 Refer to the standards(5) reference page for more information about industry standards and associated tags. PARAMETERS
Specifies an address for a jmp_buf structure. Specifies the value you want written to the execution context as the return value of the setjmp() or _setjmp() function. If you specify 0 (zero) in this parameter, the execution context contains a value of 1 as the setjmp() or _setjmp() return value. See the RETURN VALUES section for more information. DESCRIPTION
The setjmp() and longjmp() functions are useful when handling errors and interrupts encountered in low-level functions of a program. The setjmp() function saves the current stack context and signal mask in the buffer specified by the environment parameter. You then use the buffer in a later call to the longjmp() function. The longjmp() function restores the stack context and signal mask that were saved by the setjmp() function. After the longjmp() function runs, program execution continues as though the corresponding call to the setjmp() function had just returned the value of the value parameter. The function that called the setjmp() function must not have returned before the completion of the longjmp() function. The _setjmp() and _longjmp() functions operate identically to the setjmp() and longjmp() functions, respectively, except that _setjmp() and _longjmp() manipulate only the stack context. These functions do not restore the signal mask. All accessible objects have values at the time longjmp() is called, except for some objects of automatic storage duration. Objects of automatic storage duration will have indeterminant values if they meet all of the following conditions: They are local to the function con- taining the corresponding setjmp() invocation. They do not have volatile-qualified type. They are changed between the setjmp() and the longjmp() call. Because it bypasses the usual function call and return mechanisms, the longjmp() function executes correctly in contexts of interrupts, signals, and any of their associated functions. However, if the longjmp() function is invoked from a nested signal handler (that is, from a function invoked as a result of a signal raised during the handling of another signal), the behavior is undefined. NOTES
[Tru64 UNIX] For compatibility, the System V versions of the setjmp() and longjmp() functions, which are equivalent to _setjmp() and _longjmp(), respectively, are also supported. To use the System V versions of setjmp() and longjmp(), you must link with the libsys5 library before you link with libc. CAUTION
The results of the longjmp() function are undefined in the following situations: The longjmp() function is called with an environment parameter that was not previously set by the setjmp() function. The function that made the corresponding call to the setjmp() function has already returned. If the longjmp() function detects one of these conditions, it calls the longjmperror() function. If longjmperror() returns, the program is aborted. The default version of longjmperror() displays an error message to standard error and returns. If you want your program to exit more gracefully, you can write your own version of the longjmperror() program. RETURN VALUES
After the longjmp() function is finished executing, program execution continues as though the corresponding call of the setjmp() function just returned. In other words, the execution context saved by the corresponding setjmp() function is in place and execution continues at the statement immediately following the call to the setjmp() function. Part of that execution context is the return value from the setjmp() function. When the setjmp() function actually returns (before the call to the longjmp() function), that return value is 0 (zero). When the longjmp() function returns, the execution context contains a non-zero value as the return value from the setjmp() function. The value you specify in the value parameter to the longjmp() function is written to the execution context as the return value for the setjmp() function. You cannot cause the execution context to contain a 0 (zero) value for the setjmp() return value. If you specify 0 in the value parameter, the execution context contains a 1 as the setjmp() return value. RELATED INFORMATION
Routines: siglongjmp(3), sigsetjmp(3) Standards: standards(5) delim off setjmp(3)
All times are GMT -4. The time now is 12:04 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy