| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 555 人关注过本帖
标题:函数递归为什么会出现不一样的结果????
只看楼主 加入收藏
exo1991
Rank: 2
等 级:论坛游民
帖 子:66
专家分:98
注 册:2011-8-30
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
函数递归为什么会出现不一样的结果????
程序代码:
#include <iostream>
#include <iomanip>
using namespace std;
const int n=5;
int move[9][3];
int l,m,a[n+1][n+1];
bool q;
void fun(int i,int j,int k,bool &q)
{
    int v=0,g,h;
    do
    {
        v++;
        q=false;
        g=i+move[v][1];
        h=j+move[v][2];
        if(g>=1&&h<=8&&h>=1&&h<=8&&a[g][h])
        {
            a[g][h]=k;
            if(k<n*n)
            {
                fun(g,h,k+1,q);
                if(!q)  a[g][h]=0;
            }
            else
            {
                q=true;
            }
        }
    }while(!q&&v!=8);
}

int main()
{
  move[1][1]=2;move[1][2]=1;
  move[2][1]=1;move[2][2]=2;
  move[3][1]=-1;move[3][2]=2;
  move[4][1]=-2;move[4][2]=1;
  move[5][1]=-2;move[5][2]=-1;
  move[6][1]=-1;move[6][2]=-2;
  move[7][1]=1;move[7][2]=-2;
  move[8][1]=2;move[8][2]=-1;
  cout<<"n="<<n<<endl;
  cout<<"the first position:";
  int x1,y1;
  cin>>x1>>y1;
  fun(x1,y1,2,q);
  if(q)
  {
      for(l=1;l<=n;l++)
      {
          for(m=1;m<=n;m++)
              cout<<setw(4)<<a[l][m];
          cout<<endl;
      }
  }
  else
  {
      cout<<"no solutuon!"<<endl;
  }
  cout<<endl;
  return 0;
}
为什么在输入1,1后会出现 no solution !的结果呢?很是不理解。。。
另外请专家给讲解一下其中的递归函数是怎么运行的呢?
2011-10-28 22:34
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
收藏
得分:10 
程序代码:
void fun(int i,int j,int k,bool &q)
{
    int v=0,g,h;
    do
    {
        v++;
        q=false;
        g=i+move[v][1];
        h=j+move[v][2];
        if(g>=1&&g<=8&&h>=1&&h<=8&&a[g][h])/*a[g][h]没有初始值,因为是全局的,所以默认为0,
                                           所以if语句不执行,q=false;不变直到v==8跳出do...while*/
        {
            a[g][h]=k;
            if(k<n*n)
            {
                fun(g,h,k+1,q);
                if(!q)  a[g][h]=0;
            }
            else
            {
                q=true;
            }
        }
    }while(!q&&v!=8);
}
2011-10-29 00:18
exo1991
Rank: 2
等 级:论坛游民
帖 子:66
专家分:98
注 册:2011-8-30
收藏
得分:0 
回复 2楼 laznrbfe
加上好像也不对,出来的结果是这样的。
 
图片附件: 游客没有浏览图片的权限,请 登录注册
2011-10-29 17:00
lin471306489
Rank: 4
等 级:业余侠客
帖 子:136
专家分:247
注 册:2011-8-16
收藏
得分:10 
关键是输出q哪里用错啦,q作为一个全局变量,没有赋值。
if (q){、、、} 的内容是输不出来的!
bool q = false;
...
if (q = true)
{...}
试下
2011-10-29 20:12
lin471306489
Rank: 4
等 级:业余侠客
帖 子:136
专家分:247
注 册:2011-8-16
收藏
得分:0 
这个程序用来干嘛,我还真的又点不怎么清楚
2011-10-29 20:15
exo1991
Rank: 2
等 级:论坛游民
帖 子:66
专家分:98
注 册:2011-8-30
收藏
得分:0 
回复 5楼 lin471306489
在一个5*5的方格里用马走日的走法将1-25放满整个方格,如果成功则输出结果,如果不成功则输出no solution!
2011-10-30 12:27
exo1991
Rank: 2
等 级:论坛游民
帖 子:66
专家分:98
注 册:2011-8-30
收藏
得分:0 
回复 4楼 lin471306489
主函数里的q是接受了fun函数里的q,在执行fun函数的时候它不是被付值false了吗?它应该有值了吧。
2011-10-30 13:21
快速回复:函数递归为什么会出现不一样的结果????
数据加载中...
 
   



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

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