s*****n 发帖数: 956 | 1 就是 n 级的楼梯,一次可以走1级,或者两级。打印出所有可能的走法。
我想用递归做,但是不知道该如何才能打印所有完整的走法。
应该是用什么保留一下以前的路径,该如何实现呢?请做过这个题目的帮我一下。 多
谢。
我大概思路是这样的:
void printLadderPath(int n)
{
if(n == 0)
{
printf("\n")
return;
}
// start with 1
if(n >= 1)
{
.......
printLadderPath(n - 1); // recursively call
}
// start with 2
if(n >= 2)
{
........
printLadderPath(n - 2); // |
g****n 发帖数: 431 | 2 一个更简单的办法:
设m=n/2,则最多可以走m个2级楼梯。然后遍历i = from 0 to m,为走2级楼梯的数目
。对于每个i,题目变成了在n个元素的数组中任意摆放i个元素(2级楼梯)。这个子问题可以很容易用in-
place的循环实现。
【在 s*****n 的大作中提到】 : 就是 n 级的楼梯,一次可以走1级,或者两级。打印出所有可能的走法。 : 我想用递归做,但是不知道该如何才能打印所有完整的走法。 : 应该是用什么保留一下以前的路径,该如何实现呢?请做过这个题目的帮我一下。 多 : 谢。 : 我大概思路是这样的: : void printLadderPath(int n) : { : if(n == 0) : { : printf("\n")
|
f*********5 发帖数: 576 | 3 void printLadderPath(int[] path,int len,int level)
{
for (i=0,sum=0;i
{
sum+=path[level];
}
if (sum==len) {printf; return;}
if(sum<=len-1)
{
path[level]=1; printLadderPath(path,len,++level); level--;
}
if(sum<=len-2)
{
path[level]=2; printLadderPath(path,len,++level); level--;
}
}
main()
{
printLadderPath(path,100,0);
}
【在 s*****n 的大作中提到】 : 就是 n 级的楼梯,一次可以走1级,或者两级。打印出所有可能的走法。 : 我想用递归做,但是不知道该如何才能打印所有完整的走法。 : 应该是用什么保留一下以前的路径,该如何实现呢?请做过这个题目的帮我一下。 多 : 谢。 : 我大概思路是这样的: : void printLadderPath(int n) : { : if(n == 0) : { : printf("\n")
|
s*****n 发帖数: 956 | 4 这个什么时候打印出全部路径?
【在 f*********5 的大作中提到】 : void printLadderPath(int[] path,int len,int level) : { : for (i=0,sum=0;i: { : sum+=path[level]; : } : if (sum==len) {printf; return;} : if(sum<=len-1) : { : path[level]=1; printLadderPath(path,len,++level); level--;
|
f*********5 发帖数: 576 | 5 这个???
你自己思考一下什么时候应该打印
用visual studio自己调试运行一下。。
【在 s*****n 的大作中提到】 : 这个什么时候打印出全部路径?
|
s*****n 发帖数: 956 | 6 非常感谢。现在我知道在这里打印就OK了。
if (sum==len)
{
for(i = 0; i < level; i++)
printf("%d ", path[i]);
printf("\n");
return;
}
顺便提一下, 这里有个小bug,调了几次才发现。
sum+=path[level]; --->> sum+=path[i];
【在 f*********5 的大作中提到】 : 这个??? : 你自己思考一下什么时候应该打印 : 用visual studio自己调试运行一下。。
|