刚刚编写的一个递归函数一直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;
}
}
}