求高手帮忙看看这个递归函数的问题究竟在哪

iOS 码拜 9年前 (2015-05-06) 484次浏览 0个评论
 

有2数组 
    neWRadmonArray = [[NSMutableArray alloc] init];

    RadmonArray = [[NSMutableArray alloc] init];
    [RadmonArray addObject:@”A”];
    [RadmonArray addObject:@”B”];
    [RadmonArray addObject:@”C”];
    [RadmonArray addObject:@”D”];
    [RadmonArray addObject:@”E”];

我现在随即从RadmonArray取出一条

-(NSString *) GenerateRandom{

    int randomValue = arc4random()%5;//Generate 0 – 4
    NSString *returnRandom = [RadmonArray objectAtIndex:randomValue];
    int i;
    int total;
    bool existFlag=false;

    if(returnRandom==@”A” && hasGenerateBlue==true){
        [self GenerateRandom];
    }

    for(i=0,total=[neWRadmonArray count];i<total;i++)
    {
        if (returnRandom == [neWRadmonArray objectAtIndex:i]){
            existFlag = true;
            break;
        }
    }
if(existFlag)//check if has generated.
    {
       [self GenerateRandom];
    }
    else
    {
       [neWRadmonArray addObject:returnRandom];//put generated shape into array
    }
    return returnRandom;

但是还是出重复的。。。帮忙看看,,,

发现这代码的问题在于:nsstring 记录了多个 值 ,但究竟怎么改呢。。。
30分
if(existFlag)//check if has generated.
  {
  [self GenerateRandom];
  }
  else
  {
  [neWRadmonArray addObject:returnRandom];//put generated shape into array
  }
  return returnRandom;感觉就像这里的原因,如果存在了,它会调用自身函数,是不是当执行完[self GenerateRandom];之后它还会继续执行后面,后面的return returnRandom,返回的并不是你调用的[self Gen…dom]中return的东西,而是返回的你在当前这次调用函数最初赋予的,所以应该返回不出你想要的其实是递归调用的[self GeneratRandom]方法中返回的值
int randomValue = arc4random()%5;//Generate 0 – 4
  NSString *returnRandom = [RadmonArray objectAtIndex:randomValue];
  int i;
  int total;
  bool existFlag=false;

  if(returnRandom==@”A” && hasGenerateBlue==true){
  [self GenerateRandom];
  }

  for(i=0,total=[neWRadmonArray count];i<total;i++)
  {
  if (returnRandom == [neWRadmonArray objectAtIndex:i]){
  existFlag = true;
  break;
  }
  }
if(existFlag)//check if has generated.
  {                         //这里就是你调用自身,相当于把函数内容又过一次,
  int randomValue = arc4random()%5;//Generate 0 – 4
  NSString *returnRandom2222 = [RadmonArray objectAtIndex:randomValue];
  int i;
  int total;
  bool existFlag=false;

  if(returnRandom==@”A” && hasGenerateBlue==true){
  [self GenerateRandom];
  }

  for(i=0,total=[neWRadmonArray count];i<total;i++)
  {
  if (returnRandom == [neWRadmonArray objectAtIndex:i]){
  existFlag = true;
  break;
  }
  }
if(existFlag)//check if has generated.
  {
  [self GenerateRandom];
  }
  else
  {
  [neWRadmonArray addObject:returnRandom];//put generated shape into array
  }
  return returnRandom;  //这里是你想要的,它是这个if语句中再次调用自身方法,得到的是returnRandom2

  }
  else
  {
  [neWRadmonArray addObject:returnRandom];//put generated shape into array
  }
  return returnRandom;//但这里才是你在其他调用此方法的方法中真正返回的。还是最初没有让exitsFlag为假的那个已经在newArray里的值

if(existFlag)//check if has generated.
  {
  [self GenerateRandom];
  }
  else
  {
  [neWRadmonArray addObject:returnRandom];//put generated shape into array
  }
  return returnRandom;

而且你这段代码估计就有问题,generateRandom是有返回值的,怎么前面都没有赋值对象????
改成if(existFlag)//check if has generated.
  {
  returnRandom=[self GenerateRandom];
  }
然后尝试下

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明求高手帮忙看看这个递归函数的问题究竟在哪
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!