當前位置:編程學習大全網 - 編程軟體 - 壹個射擊運動員打靶,靶壹***有10環,連開10槍打中90環的可能性有多少種?請用遞歸算法編程實現。

壹個射擊運動員打靶,靶壹***有10環,連開10槍打中90環的可能性有多少種?請用遞歸算法編程實現。

表示沒有編譯器,人工看的,結果不保證完全無誤

妳的運行結果應該是沒有輸出。

都因為妳的剪枝

if (time==2 && score<10) {

return 0;

}

沒有搞懂妳的思路,妳讓time>10的時候輸出,並在初始位置讓time=1,所以打的十槍應該是2,3,4,5,6,7,8,9,10,11!!!但是妳用上述剪枝是認為time=2時應當是第二槍,所以若兩槍加起來沒有十環就無法打到90環。兩者矛盾,修改其壹即可

因此對剪枝的可行改法有3

1.直接刪去剪枝部分,此時時間效率實在不理想,不推薦,但確實有結果

2.改為if (time==3 && score<10) {

return 0;

}這是對妳的剪枝的修改,即time=3時才是第二槍但時間效率仍不高

3.改為if (score<(time-2)*10) {

return 0;

}這是對剪枝的推廣,不止是第二槍在任意壹槍結束後,只要當前掉分超過10,就不可能達到90環。推薦

另外妳的主函數中f(1,0)在此時是正確的,f(1,10)是不會在任何情況下正確,僅做剪枝上改動即可。

PS:for (i=1;i<11;i++) {

printf("%d",a[i]);

}可改為for (i=1;i<11;i++) {

printf("%d ",a[i]);//加入空格

}

  • 上一篇:什麽是響應式是什麽
  • 下一篇:機器人世界杯什麽時候舉行?我國有機器人參加嗎?
  • copyright 2024編程學習大全網