读书人

递归的有关问题 怎样跑的

发布时间: 2013-07-01 12:33:04 作者: rapoo

递归的问题 怎样跑的?

#include<iostream>
using namespace std;

void main()
{
void combination( int m, int n, int start= 1, int deep= 0);
void permutation( int m, int deep= 0);
int m,n;
cin >>m >>n;
combination( m, n);
cin >>m;
permutation( m);
}

void permutation( int m, int deep= 0)//排列
{
static int Array[1000];
static bool Flag[1000];

if ( deep == m) //递归结束判断
{
for( int i= 0; i< deep; i++)
cout<< Array[i];
cout<< " ";
return ;
}
for (int i= 1; i <=m ;i++)
{
if( Flag[i]== true)
continue; //该数用过不用
Array[deep]= i;
Flag[i]= true;
permutation( m, deep+1);
Flag[i]= false;
}
if( deep == 0) //递归程序最终结束时换行
cout<< endl;
}

void combination( int m, int n, int start= 1, int deep= 0)//组合
{
static int Array[1000];
if( n == 0)//递归结束判断
{
for( int i= 0; i < deep; i++) //输出
cout<< Array[i];
cout<< " ";
return; //跳出递归
}
for( int i= start; i <= m-n+1; i++)
{
Array[deep]= i;
combination( m, n-1, i+1, deep+1);
}
if( deep == 0)//递归程序最终结束时换行
cout<< endl;
}

例如 输入 3 2 输出 12 13 23 输入3 输出 123 132 213 231 312 321这个combination函数是怎样跑的? 我怎么感觉 只能跑出一个数组(12) 然后就返回了,,下面的 2个数组 是怎样循环输出的? 递归
[解决办法]
在递归函数递归的地方打上断点(F9),然后按F5调试运行,在Watch窗口填写某个变量的名字,即可看到该变量当前的值
[解决办法]
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!
递归函数关注以下几个因素
退出条件
参数有哪些
返回值是什么
局部变量有哪些
全局变量有哪些
何时输出
会不会导致堆栈溢出

读书人网 >C语言

热点推荐