我不确定我在使用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();
});
});
答案 0 :(得分:2)
你在构建一个新行的循环中做了一些混乱。 range(1, last_row[-1])
没有意义;你想迭代最后一行的索引,即range(len(last_row))
。您还在下一行混淆了final_r
和last_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]