【发布时间】:2016-04-11 21:51:59
【问题描述】:
如果你不知道,这就是组合函数:
C(n,k)= { 1 如果 k=0 或 k = n C(n−1,k−1)+C(n−1,k) 否则
现在,我真正需要的是使用递归来打印帕斯卡三角形。
好的,到目前为止我所做的是这个简单的递归函数:
#include <iostream>
using namespace std;
int Pas(int r, int c) {
if (c == 0 || c == r) {
return 1;
} else {
return Pas(r - 1, c - 1) + Pas(r - 1, c);
}
}
int main(){
cout << Pas(4,2) << endl;
return 0;
}
现在这个函数可以完美计算,例如:
Pas(4,2) = 6
但我在使用它打印整个帕斯卡三角形时遇到了问题,因为我是 C++ 新手,尤其是递归 ..
如果有任何反馈,我将不胜感激,我希望有人能帮助解决这个问题。但是,如果你们不只是像那样给我完整的答案(代码),我会更加感激;我想学习。
谢谢!
【问题讨论】:
-
在循环中调用你的函数,你应该已经涵盖了。
-
递归函数,即使正确实现,效率也会非常低,因为每个非终端调用都会产生两个新调用:这是指数级的。要了解正确性,请尝试调用 Pas(2, 4)。在更正函数使其正常工作后,使用迭代循环重新实现它。
-
您不能打印整个帕斯卡三角形,因为它是一个无限级数。您可以先创建一个打印第一个
n层的函数。该函数很可能返回void。 -
这就是我想到的,一个循环。但我担心只能使用递归来做到这一点。我认为没有循环是不可能做到的。我会试试看,然后问我是否还有其他问题。谢谢大家:D