递归Pascal的三角形(Python)

时间:2016-05-13 09:27:30

标签: python recursion pascals-triangle

我不确定我在使用python中的递归pascal三角形时我的代码出错了。任何帮助都很感激:)

$(document).ready(function() {
table = $('#table').DataTable({ 
      "dom": '<"top"i>rt<"bottom"flp><"clear">',
    "buttons": [
        'copy', 'csv', 'excel', 'pdf', 'print'
    ],
    "processing": true, //Feature control the processing indicator.
    "serverSide": true, //Feature control DataTables' server-side processing mode.
    "order": [], //Initial no order.

    // Load data for the table's content from an Ajax source
    "ajax": {
        "url": "<?php echo site_url('person/ajax_list')?>",
        "type": "POST"
    },

    //Set column definition initialisation properties.
    "columnDefs": [
    { 
        "targets": [ -1 ], //last column
        "orderable": false, //set not orderable
    },
    ],

});

//datepicker
$('.datepicker').datepicker({
    autoclose: true,
    format: "yyyy-mm-dd",
    todayHighlight: true,
    orientation: "top auto",
    todayBtn: true,
    todayHighlight: true,  
});

//set input/textarea/select event when change value, remove class error and remove text help block 
$("input").change(function(){
    $(this).parent().parent().removeClass('has-error');
    $(this).next().empty();
});
$("textarea").change(function(){
    $(this).parent().parent().removeClass('has-error');
    $(this).next().empty();
});
$("select").change(function(){
    $(this).parent().parent().removeClass('has-error');
    $(this).next().empty();
});
});

3 个答案:

答案 0 :(得分:2)

你在构建一个新行的循环中做了一些混乱。 range(1, last_row[-1])没有意义;你想迭代最后一行的索引,即range(len(last_row))。您还在下一行混淆了final_rlast_row

以下是您的代码的更正版本:

n = 5

def printPascal(n):
    Pascal_List = []
    if n == 0:
        Pascal_List.append([1])
        return Pascal_List

    if n == 1:
        Pascal_List.append([1])
        Pascal_List.append([1,1])
        return Pascal_List

    else:
        new_row = [1]
        final_r = printPascal(n - 1)
        last_row = final_r[-1]
        for k in range(len(last_row)-1):
            new_row.append(last_row[k] + last_row[k + 1])
        new_row.append(1)

        final_r.append(new_row)
        return final_r

print(printPascal(n))

答案 1 :(得分:1)

有一种更好的方法可以使用Pascal三角形的通用公式(n选择k),但我不会进入。

查看您的代码,我猜您正在尝试添加上一行中的前两个数字以获取下一个数字。

else条件下更改替换为

#It should be length instead.
for k in range(1, len(last_row)):
   new_row.append(last_row[k] + last_row[k - 1])
#You need to add the 1 at the end
new_row.append(1)

答案 2 :(得分:1)

@zale已经解释了for循环的问题,无需重复。但请注意,您可以使代码更简单:

  • 无需n == 1案例
  • 的特殊处理
  • 通过用零填充最后一行
  • ,可以使第二部分更简单

试试这个:

def printPascal(n):
    if n == 0:
        return [[1]]
    else:
        final_r = printPascal(n - 1)
        last = [0] + final_r[-1] + [0] # note: this does not modify final_r
        new_row = [last[k] + last[k - 1] for k in range(1, len(last))]
        return final_r + [new_row]