code error with a recursivefunction

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • nilushika
    New Member
    • Sep 2013
    • 20

    #1

    code error with a recursivefunction

    Thing I want is find the largest sum down a triangle,(movin g to adjacent numbers on the row below )there are many methods to go down.
    75
    95 64
    17 47 82
    18 35 87 10
    20 04 82 47 65
    19 01 23 75 03 34
    88 02 77 73 07 63 67
    99 65 04 28 06 16 70 92
    41 41 26 56 83 40 80 70 33
    41 48 72 33 47 32 37 16 94 29
    53 71 44 65 25 43 91 52 97 51 14
    70 11 33 28 77 73 17 78 39 68 17 57
    91 71 52 38 17 14 91 43 58 50 27 29 48
    63 66 04 68 89 53 67 30 73 16 69 87 40 31
    04 62 98 27 23 09 70 98 73 93 38 53 60 04 23
    I wrote a programme with a recursive() called finder.but it dose not work properly,at run time it becomes to a infinite status.please help me to detect the error at runtime.here is the code.
    Code:
    #include<stdio.h>
    void finder(int x,int y);
    int tot;
    	int a[15][15]={{75},{95, 64},{17, 47 ,82},{18 ,35 ,87 ,10},{20, 04, 82 ,47 \
    	,65},{19 ,01, 23 ,75, 03, 34},{88 ,2, 77 ,73, 7, 63, 67},{99 ,65, 4 ,28, 6,\
     16, 70, 92},{41 ,41 ,26, 56 ,83 ,40, 80 ,70, 33},{41, 48, 72 ,33 ,47 ,32, 37\
      ,16, 94 ,29},{53 ,71, 44, 65, 25 ,43 ,91, 52, 97 ,51 ,14},{70 ,11 ,33 ,28 ,77\
     ,73 ,17 ,78 ,39 ,68 ,17 ,57},{91 ,71 ,52 ,38 ,17 ,14 ,91 ,43 ,58, 50, 27 ,29,48},{63 ,66\
      ,4 ,68 ,89 ,53, 67, 30, 73 ,16 ,69 ,87 ,40 ,31},{4 ,62 ,98 ,27 ,23, 9 ,70 ,98, 73, 93 ,38, 53, 60, 4, 23}};
    int main(){
    	tot=a[0][0];
    finder(0,1);
    }
    void finder(int x,int y){
    	int i;static int max=0;
    if(y==14){
    	for(i=x;i<=x+1;i++){
    		tot+=a[y][i];printf("%i\n",tot);
    		if(max<tot){max=tot;}
    		tot-=a[y][i];y--;
    	}
    }
    	for(i=x;i<=x+1;i++){
    		tot+=a[y][i];
    		finder(i,++y);
    		tot-=a[y][i];y--;
    		}	
    }
    i think the error is the changing value of x after a round of for loop.how can i fix it?
  • weaknessforcats
    Recognized Expert Expert
    • Mar 2007
    • 9214

    #2
    When does finder return?

    I would expect to see code at the beginning of finder which causes finder to return.

    All recursion is able to be coded as a loop. All loops need to know when to stop by testing a condition. So if a loop stops when a variable is zero, then written as a recursion, the function should test the condition at the beginning and return immediately if the variable is zero.

    Comment

    • nilushika
      New Member
      • Sep 2013
      • 20

      #3
      I was able to find the errors,there must come a "else" after
      "if",and also don't need to y--;now it works:)
      Code:
      #include<stdio.h>
      void finder(int x,int y);
      int max=0;
      int tot;
         int a[15][15]={{75},{95, 64},{17, 47 ,82},{18 ,35 ,87 ,10},{20, 04, 82 ,47 \
         ,65},{19 ,01, 23 ,75, 03, 34},{88 ,2, 77 ,73, 7, 63, 67},{99 ,65, 4 ,28, 6,\
       16, 70, 92},{41 ,41 ,26, 56 ,83 ,40, 80 ,70, 33},{41, 48, 72 ,33 ,47 ,32, 37\
        ,16, 94 ,29},{53 ,71, 44, 65, 25 ,43 ,91, 52, 97 ,51 ,14},{70 ,11 ,33 ,28 ,77\
       ,73 ,17 ,78 ,39 ,68 ,17 ,57},{91 ,71 ,52 ,38 ,17 ,14 ,91 ,43 ,58, 50, 27 ,29,48},{63 ,66\
        ,4 ,68 ,89 ,53, 67, 30, 73 ,16 ,69 ,87 ,40 ,31},{4 ,62 ,98 ,27 ,23, 9 ,70 ,98, 73, 93 ,38, 53, 60, 4, 23}};
      int main(){
         tot=a[0][0];
          finder(0,1);
          printf("%i",max);
      }
      void finder(int x,int y){
         int i,temp=x;
       if(y==14){
         for(i=x;i<=x+1;i++){
            tot=tot+a[y][i];
            if(max<tot){max=tot;}
            tot=tot-a[y][i];
         }
        }
      else{
            for(i=x;i<=x+1;i++){
            tot=tot+a[y][i];
            finder(i,y+1);
            tot=tot-a[y][i];
            }	
        }
      }

      Comment

      Working...