标题:刚刚编写的一个递归函数一直runtime error
只看楼主
ccapp
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2009-10-23
结帖率:33.33%
已结贴  问题点数:20 回复次数:1 
刚刚编写的一个递归函数一直runtime error
我在写一个递归函数   写了几个辅助的函数以后  在主要的递归部分卡住一直编译不成功  哪位高手给看看到底是哪里出问题了~   
这个函数的内容是:
有2个水壶  一大一小   
有6种动作:   
e 是倒光小水壶里的水;E 是倒光大水壶里的水;f 是加满小水壶里的水; F 是加满大水壶里的水;p 是把小水壶的水倒到大水壶里; P 是把大水壶的水倒到小水壶里

大小水壶初始的水量都是0   这个函数接收 大小水壶的最大容量 lCap, sCap; 还有最后希望在大小水壶中的水量 lCur, sCur
然后利用递归 通过以上6种动作的结合  找出一种可行方案 要求每次倒完水以后都不会出现重复的状况
比如  输入 小水壶容量为3, 大水壶容量为 4,  希望最后的水量是小水壶3, 大水壶1
比如说有一组动作是:  F f E p f F e P `从 (0,0) 开始  得到(0,4),(3,4),(3,0),(0,3),(3,3),(3,4),(0,4),(3,1)   其中(3,4)重复了2次  所以这个结果不对


我已经编写了关于确认动作是否可行的函数:
bool actionIsPossible(char action, int sCur, int lCur, int sCap, int lCap);
还有可行以后执行这个动作并且把动作记录到string里面的函数
bool applyAction(char action, const char curSequence[], int sCur, int lCur,
                 int sCap, int lCap, char updatedSequence[], int *sUpdated,
                 int *lUpdated);

而且我基本上可以确定这两个函数都没出错,以下是我的递归函数的主体,  高手们帮忙看下哪里出问题了 , 编译器提示是 run time error:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>


bool actionIsPossible(char action, int sCur, int lCur, int sCap, int lCap);
bool applyAction(char action, const char curSequence[], int sCur, int lCur,
                 int sCap, int lCap, char updatedSequence[], int *sUpdated,
                 int *lUpdated);


char *solve(const char curSequence[],int sCur, int lCur, int sCap, int lCap, int sFinal, int lFinal)
{
    char *Solution;
   
    char Actions[7]= "eEfFpP";   //创建包含6个动作的string
   
    if( sCur == sFinal && lCur == lFinal)     //base case
    {
        Solution = (char *)malloc(strlen(curSequence));
        strcpy(Solution, curSequence);
        return Solution;
    }
    else
    {
        int Count = 0;
        bool Result = false;
      
        char *NewSequence = (char*)malloc(strlen(curSequence) + 1);
      
      
        for(;Count < 6 && Result == false; Count++)  
      //使用 for loop 循环执行每个动作,然后调用我之前创建的检查动作可行性还有计算结果的函数
       {                                                                     
            Result = applyAction(Actions[Count], curSequence, sCur, lCur, sCap, lCap,    NewSequence, &sCur, &lCur);
            
            if(Result == true) //  如果动作可执行 就记录下结果  然后进行递归
            {
                Solution = (char*)malloc(strlen(NewSequence) + 1);
                Solution = solve(NewSequence, sCur, lCur, sCap, lCap, sFinal, lFinal);
            
                if(strcmp(Solution,"Not Found") != 0)
                {
                    return Solution;
                }
                free(Solution);
                free(NewSequence);
            }
            
            
        }
      
        if(Result == false)
        {
            char *Solution = (char*)malloc(sizeof(char)*10);
            strcpy(Solution,"Not Found");
            return Solution;
        }
    }
}
搜索更多相关主题的帖子: runtime 函数 递归 编写 
2009-11-22 02:21
fgchg911
Rank: 4
等 级:业余侠客
威 望:1
帖 子:131
专家分:204
注 册:2009-9-6
得分:20 
main函数不写出来,编译不过还怎么给你看,还得我自己写不成,又不知道你是怎么做的

你那函数不管有问题没,参数太多了,我测试程序都不知道怎么写,

楼主把main函数贴上来
2009-11-22 20:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-292939-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.504482 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved