帕斯卡三角形的递归函数

时间:2018-11-02 15:22:23

标签: c++

int Pascal_Tri(int row , int col)
{
    if (row==col || col==0)
        return 1 ;
    else
    {
        return Pascal_Tri(row-1,col)+Pascal_Tri(row-1,col-1);
    }

}

此代码存在问题,我无法发现它。 当我运行它时,程序停止工作,并且没有结果消失

2 个答案:

答案 0 :(得分:0)

C ++ 11

#include <iostream>                                                             
#include <vector>                                                               
std::vector<int> pascal(int height, std::vector<int> curr)                      
{            
    for(int i=0; i<curr.size(); i++)                                            
        std::cout<<curr[i]<<" ";                                                
    std::cout<<std::endl;                                                                    
    if(height<=0)                                                               
        return curr;                                                            
    std::vector<int> newCurr(curr.size()+1,1);                                  
    for(int i=0; i+1 < curr.size(); i++)                                        
            newCurr[i+1] = curr[i] + curr[i+1];                                 

    return pascal(height-1,newCurr);                                            
}                                                                               

int main()                                                                      
{                                                                               
    int row, col;                                                               
    std::cin>>row>>col;                                                         
    std::vector<int> rowPascal = pascal(row,std::vector<int>{1});               
    std::cout<< rowPascal[col];                                                 
}  

具有驱动程序功能进行测试。我知道这不是很有效,但是应该可以!

基本上,这将为您提供pascal三角形中特定行(从顶部)和特定列(从左侧)的数字。 (均为零索引)

答案 1 :(得分:0)

鉴于不使用循环就很难打印三角形,这是一个使用纯递归Pascal_Tri函数来计算数字但循环打印的解决方案:

int rowsToPrint = 5;

for (int row = 0; row < rowsToPrint; ++row)
{
    for (int col = 0; col <= row; ++col)
        std::cout << Pascal_Tri(row, col) << ",  ";
    std::cout << std::endl;
}

Demo